Autore Topic: Problema con ListView e RadioButton  (Letto 659 volte)

Offline mariusv5

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Legend
  • Sistema operativo:
    Windows
Problema con ListView e RadioButton
« il: 06 Luglio 2011, 11:33:59 CEST »
0
Ho realizzato un'applicazione che presenta una lista di item, in cui è possibile scegliere un solo elemento tra quelle elencati. Il problema è che i radiobutton possono essere selezionati tutti, come nelle checkbox. Ho provato anche ad inserire un radiogroup ma ottengo sempre il medesimo comportamento.


Allego quanto ho realizzato.

Codice (XML): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="60dip"
        android:padding="5dip">

        <RadioGroup
                android:id="@+id/radioCheck"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <RadioButton
                        android:id="@+id/ticketCheck"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"></RadioButton>
        </RadioGroup>
               
        <TextView
                android:id="@+id/ticketDatetime"
                android:text="Dataora"
                android:layout_toRightOf="@+id/radioCheck"
                android:layout_marginLeft="5dip"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"></TextView>
               
        <TextView
                android:id="@+id/ticketDescription"
                android:text="Object"
                android:layout_toRightOf="@+id/radioCheck"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#6b71f1"
                android:layout_alignLeft="@+id/ticketDatetime"
                android:layout_alignParentBottom="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
        </TextView>
</RelativeLayout>

Codice (XML): [Seleziona]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearTab1"
        android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent">
   
        <ListView
                android:id="@+id/ticketListI"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"></ListView>

        <TextView
                android:id="@+id/txtEmptyTicketI"
                android:layout_height="wrap_content"
                android:layout_width="match_parent"
                android:visibility="invisible"
                android:text=""></TextView>
</LinearLayout>


Codice (Java): [Seleziona]
Ticket[] iTickets = new Ticket[iElement];
// Load iTickets from my archive
MyAdapter iArrayAdapter = new MyAdapter(TicketAcquire.this, android.R.layout.simple_list_item_single_choice, iTickets);
iListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
iListView.setAdapter(iArrayAdapter);


private class MyAdapter extends ArrayAdapter<Ticket>
{
    private Ticket[] ticket = null;
    private LayoutInflater mInflater = null;

    public MyAdapter(Context context, int resource, Ticket[] ticket)
    {
        super(context, resource, ticket);
       
        this.ticket = ticket;
        this.mInflater = (LayoutInflater)TicketAcquire.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public View getView(int position, View convertView, ViewGroup parent)
    {
        View view = mInflater.inflate(R.layout.ticket_item, null);

        Ticket t = ticket[position];
       
        tRadiobutton = (RadioButton)view.findViewById(R.id.ticketCheck);
        tRadiobutton.setTag(t.getId());
        if (t.getType() == Ticket.TYPE_INSTALLATION)
                tRadiobutton.setOnCheckedChangeListener(iRadioChangeListener);
        else
                tRadiobutton.setOnCheckedChangeListener(mRadioChangeListener);
       
        RadioGroup radioCheck = (RadioGroup)view.findViewById(R.id.radioCheck);
        radioCheck.removeView(tRadiobutton);
        radioCheck.addView(tRadiobutton);

        tDatetime = (TextView)view.findViewById(R.id.ticketDatetime);
        tDatetime.setText(t.getDatetimeOpened() + " - " + t.getCode());

        tDescription = (TextView)view.findViewById(R.id.ticketDescription);
        tDescription.setText(t.getDescription());
       
        return view;
    }
}

private OnCheckedChangeListener iRadioChangeListener = new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton view, boolean isChecked)
{
    Integer tagId = (Integer)view.getTag();
       
    if (isChecked)
    {
        Log.d("LOG", "TicketAcquire - Selected item I = " + tagId.toString());
    }
    else
    {
        Log.d("LOG", "TicketAcquire - Deselected item I = " + tagId.toString());
    }
}
};


In allegato l'immagine delle due radiobutton entrambe selezionate.

Potete darmi qualche indicazione per risolvere questo comportamento anomalo ?

Grazie,
Mario.

Offline mariusv5

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Legend
  • Sistema operativo:
    Windows
Re:Problema con ListView e RadioButton
« Risposta #1 il: 13 Luglio 2011, 18:19:29 CEST »
0
Potete aiutarmi per favore in merito a quanto sopra riportato ?

Ho eseguito delle modifiche aggiuntive al codice per cercare un workaround al problema, ma non ho trovato niente di funzionante. E' possibile che delle "radio button" si comportino in questo modo anomalo ? Nel caso di multiselezione avrei utilizzato le checkbox, le radio servono proprio a selezionare un singolo elemento della lista.

Grazie.