2017-11-26 9 views
0

Ich habe ein Fragment, das eine Recyclerview und eine Floating-Action-Schaltfläche enthält. In der Recycler-Ansicht enthält jede Zeile ein Optionsfeld, das standardmäßig deaktiviert ist. Meine Anforderung ist, dass ich diese Optionsfelder in jeder Zeile aktivieren muss, wenn ein Klick auf ein Ereignis ausgelöst wird. Gibt es eine Lösung?Aktiviere oder deaktiviere recyclerview items

Vielen Dank im Voraus ..

OK ... habe ich eine Lösung.

Hier ist mein Code.

fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        for (int i = 0; i <= adapter.getItemCount(); i++) { 

         View childVIew = recyclerView.getChildAt(i); 

         if (childVIew != null) { 
          RadioButton radioYes = childVIew.findViewById(R.id.radio_yes_my_health_info); 
          radioYes.setEnabled(true); 

          RadioButton radioNo = childVIew.findViewById(R.id.radio_no_my_health_info); 
          radioNo.setEnabled(true); 
         } 
        } 

        fab.setImageResource(R.drawable.ic_save_white_24dp); 
        recyclerView.getRecycledViewPool().setMaxRecycledViews(0, 0); 
       } 
      }); 

Jetzt auf FAB-Taste klicken, werden alle Radio-Buttons in meinem recyclerview wird aktiviert sein, und ich kann Sie auf den Zustand jedes Optionsfeld ändern. Aber hier habe ich ein Problem. Wenn ich auf die FAB-Schaltfläche klicke, werden alle Radio-Buttons in der Recycler-Ansicht aktiviert, aber wenn ich in der Recycler-Ansicht blättere, werden alle diese Radio-Buttons deaktiviert oder wieder deaktiviert. Bitte gib mir eine Lösung dafür.

Antwort

0

Sie eine Flagge in Ihrem Adapter wie

boolean isActivated = false; 

public void setActivated(boolean activated) { 
    isActivated = activated; 
} 

und in Ihrem onBindViewHolder() -Methode haben Sie können nach der Flagge suchen und den Status Ihrer Flagge entsprechend einstellen.

Im OnClickListener Ihrer FAB, rufen

adapter.setActivated(true);//true or false as per your requirement 
adapter.notifyDataSetChanged(); 

Diese funktionieren sollte.

0

Sie können versuchen, durch jede Ansicht Looping, wenn Sie auf die Schaltfläche klicken, etwa so:

for (int i = 0; i < adapter.getItemCount(); i++) { 
    View view = recycler.getLayoutManager().findViewByPosition(i); 
    view.setSelected(true); //Select item 
    notifyItemChanged(i); //Notify item changed 
} 
+0

Wie kann ich nur Radio-Button aus jeder Zeile auswählen? Tatsächlich enthält der Recycler in jeder Zeile ein Textfeld und zwei Optionsfelder. Ich muss nur diese zwei Radioknöpfe aus jeder Reihe auswählen. In Ihrer Methode erhalten wir eine Sicht, indem wir findViewByPosition (i) verwenden. Dies kann alle Ansichten einschließlich Textfeld und zwei Optionsfelder zurückgeben. Ich brauche nur zwei Radiobuttons und ich muss diese Tasten aktivieren. Standardmäßig sind diese Schaltflächen deaktiviert. –

+0

Sie können view.findViewById (R.id.radio_button) verwenden, um das Optionsfeld auszuwählen, das Sie auswählen möchten. –

+0

Ich habe 20 Artikel in meinem Adapter. Aber in der for-Schleife zeigt es nur 7 Elemente. Nach 7 bekomme ich null Zeigerausnahme. irgendeine Idee? –

Verwandte Themen