2017-12-22 5 views
0

Ich habe eine benutzerdefinierte ListView von einem ArrayAdapter festgelegt. Jede Zeile hat eine TextView und 3 RadioButtons.Löschen von RadioGroup in einem ListView

Die Objekte, die die AdapterView sehen wie folgt füllen:

public class MyItem { 

    public String title = ""; 
    public boolean rb1 = false; 
    public boolean rb2 = false; 
    public boolean rb3 = false; 

    public MyItem(String title, boolean rb1, boolean rb2, boolean rb3) { 
     this.title = title; 
     this.rb1 = rb1; 
     this.rb2 = rb2; 
     this.rb3 = rb3; 
    } 

} 

Innerhalb der getView() Methode, ich habe die Einrichtung ein OnLongClickListener, denn ich mag die Auswahl nach einem langen Druck auf einer Zeile löschen:

public class MyAdapter extends ArrayAdapter<MyItem> { 

    private Context context; 
    private int layoutResourceId; 
    private ArrayList<MyItem> items = null; 

    public MyAdapter(Context context, int textViewResourceId, ArrayList<MyItem> objects) { 
     super(context, textViewResourceId, objects); 
     this.layoutResourceId = textViewResourceId; 
     this.context = context; 
     this.items = objects; 
    } 

    @Override 
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
     View row = convertView; 
     final MyItemHolder holder; 

     if (row == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(layoutResourceId, parent, false); 
      holder = new MyItemHolder(); 
      holder.tvTitle = (TextView) row.findViewById(R.id.tvTitle); 
      holder.rb1 = (RadioButton) row.findViewById(R.id.rb1); 
      holder.rb2 = (RadioButton) row.findViewById(R.id.rb2); 
      holder.rb3 = (RadioButton) row.findViewById(R.id.rb3); 
      row.setTag(holder); 
     } else { 
      holder = (MyItemHolder)row.getTag(); 
     } 

     String title = items.get(position).title; 
     Boolean rb1Checked = items.get(position).rb1; 
     Boolean rb2Checked = items.get(position).rb2; 
     Boolean rb3Checked = items.get(position).rb3; 

     holder.tvTitle.setText(title); 
     holder.rb1.setChecked(rb1Checked); 
     holder.rb2.setChecked(rb2Checked); 
     holder.rb3.setChecked(rb3Checked); 

     row.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View view) { 
       items.get(position).rb1 = false; 
       items.get(position).rb2 = false; 
       items.get(position).rb3 = false; 
       holder.rb1.setChecked(false); 
       holder.rb2.setChecked(false); 
       holder.rb3.setChecked(false); 
       notifyDataSetChanged(); 
       return true; 
      } 
     }); 

     return row; 
    } 

    static class MyItemHolder { 
     TextView tvTitle; 
     RadioButton rb1; 
     RadioButton rb2; 
     RadioButton rb3; 
    } 

} 

auf diese Weise funktioniert es, aber ... Lassen sie uns sagen, das erste Radiobutton ausgewählt wurde, nach einem langen Druck auf die Reihe, keines der Optionsfelder ausgewählt werden, aber ich bin nicht in der Lage, die erste wählen wieder eins. Ich kann den zweiten oder dritten wählen, aber nicht den ersten.

+0

Probieren Sie 'your_radiobutton1.setChecked (false);' und tun dies für alle Ihre RadioButtons innerhalb der bestimmten Artikel, die Sie löschen möchten. – dalla92

+0

Ich habe das versucht, aber es verhält sich genauso. – Dusan

+1

Aktualisieren Sie den gesamten Adaptercode – ABDevelopers

Antwort

1

Sie können dieses Problem lösen, indem Sie

radioGroup.clearCheck() 

statt

radioButtonA.setChecked(false) 

Um dies zu tun, müssen Sie Sie für jeden Artikel den Verweis auf die Radio-Gruppe erhalten möchten löschen .

+0

Ja! Vielen Dank. – Dusan

Verwandte Themen