2017-03-26 1 views
0

J'essaie de créer une fonction de filtre, j'ai une fenêtre pop-up dans mon activité de recherche, il affiche la liste des commutateurs où l'utilisateur peut éteindre certains d'entre eux .. J'ai eu le pop up pour afficher correctement mais chaque fois que je coche un commutateur, la valeur n'est pas transmise à l'activité de recherche et ne rien faire. voici mon code: recherche extrait d'activité:en utilisant un commutateur dans un popup

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

fonction popup (intérieur 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 (commutateurs)

<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> 

J'utilise "toast" pour garder la trace de la valeur "filtre de stationnement", mais sans succès. dans le journal

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

Répondre

0

Votre commutateur est nul, car vous le recherchez au mauvais endroit. Vous devez trouver vue par ID dans la disposition exacte que vous gonflez; Modifier cette

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

à cette

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

Au lieu de:

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

Do:

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