Autore Topic: Come visualizzare gli id dei radiobutton di una lista  (Letto 1157 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Come visualizzare gli id dei radiobutton di una lista
« il: 06 Febbraio 2011, 14:39:21 CET »
0
Ho creato una activity che mostra una lista composta da 4 radiobutton
Avevo bisogno di stampare sulla console del logcat gli id di ciascun radiobutton
Per farlo ho scritto il seguente codice, il problema è che childCount risulta zero invece dovrebbe ritornare 4
sapete dirmi come mai?

Codice (Java): [Seleziona]
public class ListFindViewById extends Activity {
        ListView listView;
        private static final String[] items = { "one", "two", "three", "four" };

        @Override
        public void onCreate(Bundle icicle) {
                super.onCreate(icicle);
                setContentView(R.layout.list_find_view_by_id);

                listView = (ListView) findViewById(R.id.radiobuttonListView);
                listView.setAdapter(new IconicAdapter());

                showRadioButtonId();
        }

        private void showRadioButtonId() {
                int childCount = listView.getChildCount();

                int[] radioButtonIdArray = new int[childCount];
                Log.d("", "childCount: " + childCount);              <------- ritorna zero invece dovrebbe essere 4
                //creo un array con gli id di tutti i radiobutton
                for (int i = 0; i < childCount; i++) {
                        View vview = listView.getChildAt(i);
                        RadioButton radio = (RadioButton) vview.findViewById(R.id.radio);
                        radioButtonIdArray[i] = radio.getId();
                        Log.d("", "radioButtonIdArray[i]: " + radioButtonIdArray[i]);
                }

        }

        class IconicAdapter extends ArrayAdapter<String> {
                IconicAdapter() {
                        super(ListFindViewById.this, R.layout.list_find_view_by_id_row,
                                        items);
                }

                public View getView(int position, View convertView, ViewGroup parent) {
                        LayoutInflater inflater = getLayoutInflater();
                        View row = inflater.inflate(R.layout.list_find_view_by_id_row,
                                        parent, false);

                        return (row);
                }
        }
}

Questo è l'xml de layout list_find_view_by_id.xml:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
     <ListView  
        android:id="@+id/radiobuttonListView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />


 </LinearLayout>

questo è l'xml delle righe list_find_view_by_id_row.xml:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:id="@+id/row_view_id">


<RadioButton
   android:id="@+id/radio"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   
/>
                   
</RelativeLayout>
« Ultima modifica: 06 Febbraio 2011, 15:03:55 CET da andream1977 »

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come visualizzare gli id dei radiobutton di una lista
« Risposta #1 il: 07 Febbraio 2011, 14:51:56 CET »
0
Provo a forumlare la mia domanda in maniera diversa
Se ho una lista di radiobuton, e volessi fare in modo che se l'utente clicca su un radio, si deselezionano tutti gli altri radio come faccio?
il metodo è myRadio.setChecked(false) ma non capisco come fare a recuperare i radio della lista per applicarci il metodo setChecked(false)

P.S. ho un custom layout e quindi non posso usare listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Come visualizzare gli id dei radiobutton di una lista
« Risposta #2 il: 07 Febbraio 2011, 15:00:59 CET »
0
Provo a forumlare la mia domanda in maniera diversa
Se ho una lista di radiobuton, e volessi fare in modo che se l'utente clicca su un radio, si deselezionano tutti gli altri radio come faccio?
il metodo è myRadio.setChecked(false) ma non capisco come fare a recuperare i radio della lista per applicarci il metodo setChecked(false)

P.S. ho un custom layout e quindi non posso usare listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
se li metti in un radioGroup lo fa gia android la gestione del single active
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come visualizzare gli id dei radiobutton di una lista
« Risposta #3 il: 07 Febbraio 2011, 15:10:06 CET »
0
Nicola_D come faccio a metterli in un radiogroup, io ho una ListView dove la riga è composta da un radiobutton
Non posso definire un radioGroup

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come visualizzare gli id dei radiobutton di una lista
« Risposta #5 il: 07 Febbraio 2011, 17:45:33 CET »
0
Non riesco a venirne a capo neanche con i link che mi hai dato, avrei bisogno di una mano
Il mio problema è questo, ho una lista di radio button
L'utente preme su una riga di questa lista
Raccolgo l'evento del click nel metodo

@Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

}

In questo metodo non so come ricavare il riferimento ai radio button della lista per potergli cambiare lo stato

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Come visualizzare gli id dei radiobutton di una lista
« Risposta #6 il: 07 Febbraio 2011, 20:38:37 CET »
0
purtroppo non ho mai provato quindi non so aiutarti piu di tanto...
l'unica cosa che posso dirti è che View view è la view per il layout di ogni riga (quindi da li ti puoi ricavare il tuo radiobutton dandogli l'id dello stesso nella riga), l'adapterView se non mi sbaglio è l'adapter che setta le view, tipo nel mio caso ho una listview di commenti e mi son creato un CommentListAdapter extends BaseAdapter.
Quel parent per me è CommentsListAdapter.
Purtroppo di piu non ti so aiutare non avendo fatto niente del genere!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come visualizzare gli id dei radiobutton di una lista
« Risposta #7 il: 07 Febbraio 2011, 20:41:18 CET »
0
Ma il metodo getChildAt se metti manualmente la posizione ti ritorna qualcosa oppure no?

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come visualizzare gli id dei radiobutton di una lista
« Risposta #8 il: 07 Febbraio 2011, 23:53:08 CET »
0
Ho messo
Log.d("", "childAt 1: " + listView.getChildAt(1));
dentro showRadioButtonId()
e ritorna null

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come visualizzare gli id dei radiobutton di una lista
« Risposta #9 il: 08 Febbraio 2011, 01:32:34 CET »
0
Sono riuscito a risolvere il problema, allego il progetto che consiste nel visualizzare una lista di righe personalizzate contenenti almeno un radiobutton
Ogni riga risponde sia al click  sulla riga stessa sia al radiobutton presente sulla riga
Ci sono volute un sacco di ore di lavoro ma alla fine funziona
Ho dei dubbi su quanto sia ottimizzato il codice, se qualcuno degli esperti java volesse dare un occhiata al codice mi farebbe piacere
Di segito riporto il codice dell'activity principale e del relativo adapter

Demo.java
Codice (Java): [Seleziona]
public class Demo extends ListActivity implements OnItemClickListener {
        private Context context;
        private ListView listView;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                context = getApplicationContext();
                listView = getListView();
                List<PetBean> listItems = new ArrayList<PetBean>();
                int listItemsLength = 10;
                for (int i = 0; i < listItemsLength; i++) {
                        listItems.add(new PetBean(i, "Nome" + i, 0, 0));

                }
                ListAdapter adapter = new DemoAdapter(this, listItems);

                setListAdapter(adapter);

                listView.setOnItemClickListener(this);
        }

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
                PetBean selectedRow = (PetBean) listView.getItemAtPosition(position);
                String textOnSelectdRow = "Click sulla riga!\nTesto presente alla riga selezionata: "
                                + selectedRow.getNome();
                Toast.makeText(context, textOnSelectdRow, Toast.LENGTH_SHORT).show();
                deselectAllRadioButton(view);
                RadioButton radio = (RadioButton) view.findViewById(R.id.radio);
                radio.setChecked(true);

        }

        private void deselectAllRadioButton(View view) {
                int childCount = listView.getChildCount();
                Log.d("", "childCount: " + childCount);
                for (int i = 0; i < childCount; i++) {
                        View childView = listView.getChildAt(i);
                        RadioButton radio = (RadioButton) childView
                                        .findViewById(R.id.radio);
                        radio.setChecked(false);
                }

        }
}

DemoAdapter.java
Codice (Java): [Seleziona]
public class DemoAdapter extends ArrayAdapter<PetBean> {

        Activity context;

        List<PetBean> items;

        public DemoAdapter(Activity aContext, List<PetBean> items) {

                super(aContext, R.layout.row, items);

                context = aContext;

                this.items = items;

        }

        public View getView(int position, View convertView, ViewGroup parent) {

                View row = convertView;

                if (row == null) {

                        LayoutInflater inflater = (LayoutInflater) context

                        .getLayoutInflater();

                        row = inflater.inflate(R.layout.row, null);

                }

                TextView text = (TextView) row.findViewById(R.id.text);

                text.setText(((PetBean) items.get(position)).getNome());

                RadioButton radioButton = (RadioButton) row.findViewById(R.id.radio);
                radioButton.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View view) {
                                LinearLayout linearLayout = (LinearLayout) view.getParent();
                                TextView textView = (TextView) linearLayout
                                                .findViewById(R.id.text);
                                String textOnSelectdRow = "Click sul radioButton!\nTesto presente alla riga selezionata: "
                                                + textView.getText();
                                Toast.makeText(context, textOnSelectdRow, Toast.LENGTH_SHORT)
                                                .show();

                                if (((RadioButton) view).isChecked()) {
                                        deselectAllRadioButton(view);
                                } else {
                                        deselectAllRadioButton(view);
                                }
                                ((RadioButton) view).setChecked(true);
                        }

                        private void deselectAllRadioButton(View view) {
                                ListView listView = (ListView) ((LinearLayout) view.getParent())
                                                .getParent();
                                int childCount = listView.getChildCount();
                                Log.d("", "childCount: " + childCount);
                                for (int i = 0; i < childCount; i++) {
                                        View childView = listView.getChildAt(i);
                                        RadioButton radio = (RadioButton) childView
                                                        .findViewById(R.id.radio);
                                        radio.setChecked(false);
                                }

                        }

                });

                return row;

        }

}

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come visualizzare gli id dei radiobutton di una lista
« Risposta #10 il: 08 Febbraio 2011, 01:35:30 CET »
0
Non mi fa inviare l'allegato (un normale file .zip da 52k), se qualcuno è interessato mi manda una mail e glielo mando in posta, riporto l'errore in fase di upload

Pagina web non disponibile.

La pagina web all'indirizzo Accedi potrebbe essere temporaneamente non disponibile oppure è stata permanentemente spostata a un nuovo indirizzo web.

  Ulteriori informazioni sull'errore
Di seguito è riportato il messaggio di errore originale

Errore 101 (net::ERR_CONNECTION_RESET): Errore sconosciuto.