2017-03-26 4 views
0

Ich versuche, eine Filterfunktion zu erstellen, ich habe ein Popup-Fenster in meiner Suche Aktivität zeigt eine Liste der Schalter, wo der Benutzer einige von ihnen aus und wieder einschalten kann .. Ich habe die Pop-up, um gut anzuzeigen, aber jedes Mal, wenn ich einen Schalter ankreuze, wird der Wert nicht an die Suchaktivität übergeben und macht nichts. hier ist mein Codes: Suche Aktivität Schnipsel:mit einem Schalter in einem Popup

filter.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      initiatePopupWindow(); 
     } 
    }); 

Popup-Funktion (innen SearchActivity)

 private void initiatePopupWindow() { 
     try { 
// We need to get the instance of the LayoutInflater 
      LayoutInflater inflater = (LayoutInflater)SearchActivity.this 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View layout = inflater.inflate(R.layout.activity_filter, 
        (ViewGroup) findViewById(R.id.popup_element)); 
      pwindo = new PopupWindow(layout ,ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT,true); 

      pwindo.showAtLocation(layout, Gravity.CENTER, 0, 0); 

      switch1 = (Switch) findViewById(R.id.parking); 
      switch2 = (Switch) findViewById(R.id.delivery); 
      switch3 = (Switch) findViewById(R.id.reservation); 
      switch4 = (Switch) findViewById(R.id.bar); 
      switch5 = (Switch) findViewById(R.id.card); 
      switch6 = (Switch) findViewById(R.id.wifi); 
      switch7 = (Switch) findViewById(R.id.terrace); 

      btnClosePopup = (Button) layout.findViewById(R.id.btn_close_popup); 
      btnClosePopup.setOnClickListener(cancel_button_click_listener); 

      switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton compoundButton, boolean bChecked) { 
        if (bChecked) { 
         parking_filter=1; 
         Toast.makeText(getApplicationContext(), 
           "Searching Database using : " + parking_filter, 
           Toast.LENGTH_SHORT).show(); 

        } else { 
         parking_filter=0; 
         Toast.makeText(getApplicationContext(), 
           "Searching Database using : " + parking_filter, 
           Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 

activity_filter.xml (Schalter)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/popup_element" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="@color/cardview_light_background" 
android:padding="10sp" > 
    <Switch 
     android:id="@+id/delivery" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:text="Has Delivery" 
     android:layout_below="@+id/reservation" 
     android:layout_alignParentStart="true" /> 

    <Switch 
     android:id="@+id/parking" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Has Parking" 
     android:layout_marginTop="20dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" /> 
    <Switch 
     android:id="@+id/reservation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Takes Reservations" 
     android:layout_marginTop="20dp" 
     android:layout_below="@+id/terrace" 
     android:layout_alignParentStart="true" /> 
    <Switch 
     android:id="@+id/terrace" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:text="outdoor seating" 
     android:layout_below="@+id/bar" 
     android:layout_alignParentStart="true" /> 
    <Switch 
     android:id="@+id/wifi" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:text="Has Wifi" 
     android:layout_below="@+id/parking" 
     android:layout_alignParentStart="true" /> 

    <Switch 
     android:id="@+id/bar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:text="Has Bar" 
     android:layout_below="@+id/wifi" 
     android:layout_alignParentStart="true" /> 

    <Switch 
     android:id="@+id/card" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Accept Cards" 
     android:layout_marginTop="20dp" 
     android:layout_below="@+id/delivery" 
     android:layout_alignParentStart="true" /> 

<Button 
    android:id="@+id/btn_close_popup" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Close" 
    android:layout_below="@+id/card" /> 


</RelativeLayout> 

Ich bin mit "Toast" um den "Parkfilter" -Wert zu behalten, aber ohne Erfolg. im Protokoll

java.lang.NullPointerException: Attempt to invoke virtual method 'void  android.widget.Switch.setOnCheckedChangeListener(android.widget.CompoundButton$OnCheckedChangeListener)' on a null object reference 

Antwort

0

Ihr Switch ist null, weil Sie an falscher Stelle suchen. Sie müssen die Ansicht nach ID im exakten Layout finden, das Sie aufblasen. dies ändern

switch1 = (Switch) findViewById(R.id.parking); 

dieser

switch1 = (Switch) layout.findViewById(R.id.parking); 
1

Statt:

switch1 = (Switch) findViewById(R.id.parking); 

Do:

switch1 = (Switch) layout.findViewById(R.id.parking); 
Verwandte Themen