2017-11-27 9 views
0

Ich habe einen Adapter für Recyclerview. Wo ich Array-Liste von meiner Aktivität wie übergeben Daten ist ArrayList einige Daten.Wie implementiert man das Kontrollkästchen in RecyclerView?

AlternativeAdapter alternativeAdapter= new AlternativeAdapter(AlternativeActivity.this, data); 

    recyclerView.setAdapter(alternativeAdapter); 

In der AlternativeAdapter-Klasse habe ich eine Textansicht und ein Kontrollkästchen. Ich kann alle Textelemente mit Kontrollkästchen anzeigen.

In der AlternativeAdapter Klasse

public class AlternativeCurrencyAdapter extends RecyclerView.Adapter<AlternativeCurrencyAdapter.ViewHolder>{ 

ArrayList<String> currencyListArray; 
    Context context; 
    View view1; 
    ViewHolder viewHolder1; 
    TextView textView; 
    private int selectedPosition = -1;// no selection by default 
    public AlternativeCurrencyAdapter(Context context1, ArrayList<String> currencyListArray){ 

     this.currencyListArray = currencyListArray; 
     context = context1; 
    }  
    public class ViewHolder extends RecyclerView.ViewHolder{ 

     public TextView username; 
     public CheckBox chkSelected; 
     public ViewHolder(View v){ 
      super(v); 
      username = (TextView)v.findViewById(R.id.username); 
      chkSelected = (CheckBox) v.findViewById(R.id.chkSelected); 
      itemView.setOnClickListener(new View.OnClickListener(){ 
       @Override 
       public void onClick(View v) { 
        // get position 
        int pos = getAdapterPosition(); 

        // check if item still exists 
        if(pos != RecyclerView.NO_POSITION){ 
         String clickedDataItem = currencyListArray.get(pos); 
         Toast.makeText(v.getContext(), "You clicked " + clickedDataItem, Toast.LENGTH_SHORT).show(); 

        } 
       } 
      }); 

     } 
    } 

    @Override 
    public AlternativeCurrencyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ 

     view1 = LayoutInflater.from(context).inflate(R.layout.alternative_currency_adapter_list,parent,false); 

     viewHolder1 = new ViewHolder(view1); 

     return viewHolder1; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, final int position){ 

     holder.username.setText(currencyListArray.get(position)); 
    } 
    @Override 
    public int getItemCount(){ 
     return currencyListArray.size(); 
    } 
} 

Auf diese Weise das Element der Array-Liste angezeigt wird, aber mein Bedarf an Artikel ist im linken Ecke und Kontrollkästchen der einzelnen Elemente angezeigt werden sollte rechten Ecke angezeigt werden soll. Wenn jemand auf Checkbox-Toast-Nachricht klickt, sollte kommen, wie Sie XYZ-Element ausgewählt haben. Und nur einzelne Auswahl ist nicht Multi-Auswahl erforderlich.

wenn ich

holder.chkSelected.setChecked(currencyListArray.get(position).isSelected()); 

I zeigt Zeitfehler kompilieren. Kann nicht aufgelöst werden isSelected()

Bitte führen Sie mich.

+0

Sie versuchen, auf isSelected is Arraylist-Methode zuzugreifen, isSelected() ist jedoch keine Arraylist-Methode. currencyListArray.get (position) ist die Rückgabewertnummer in der ArrayList-Position, die nicht zurückgegeben wird, wenn das Kontrollkästchen aktiviert ist oder nicht. –

+0

Bitte überprüfen Sie diesen Link für eine einzelne Auswahl in RecyclerView https://stackoverflow.com/questions/39127008/how-can-i-select-only-one-checkbox-in-recyclerview-and-notifydataset-changed –

Antwort

1

Als erstes, Ihr currencyListArray ist eine Arraylist von String, so dass es nicht für "isSelected()" zurückgibt.

und jetzt zu Ihrer Anforderung kommen, müssen Sie eine Nachricht anzeigen, wenn eines der Kontrollkästchen ausgewählt ist.

So Code wie folgt:

@Override 
public void onBindViewHolder(ViewHolder holder, final int position){ 

    holder.username.setText(currencyListArray.get(position)); 
    holder.chkSelected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
      //do your toast programming here. 
     } 
    }); 
} 

jetzt auf Ihre zweite Anforderung kommen, denn nur ein Element zu einem Zeitpunkt auswählen: hier ist der Code für die ::

chkSelected.setChecked(position== selectedPosition); 

     chkSelected.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if(isChecked) 
       { 
        selectedPosition = position; 
       } 
       else{ 
        selectedPosition = -1; 
       } 
       notifyDataSetChanged(); 
      } 
     }); 
+0

es funktioniert gut. Vielen Dank Ankit. –

+0

Hallo @gyanSawasthi bitte upvote meine Antwort auch –

Verwandte Themen