simple example custom arrayadapter array android android-arrayadapter

example - listview android



arrayAdapter solo devuelve una posiciĆ³n, Android (5)

Configuré el arrayList a 12 elementos, sin embargo, el arrayAdapter solo devuelve un elemento en la pantalla, ¿por qué sucede esto? Se supone que debe mostrar 12 elementos en la lista.

public class MainActivity extends Activity { ArrayList<CheckBoxInfo> cfo = new ArrayList<CheckBoxInfo>(); CheckBoxInfo cbr; private ListAdapter MyAdapter; ListView listview; MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cbr = new CheckBoxInfo(); cbr.checkBoxName = "dfdjklfjdkljf"; cbr.checkBoxState = true; for(int i = 0; i <12; i++){ cfo.add(cbr); } Toast.makeText(MainActivity.this, "size: " + cfo.size(), Toast.LENGTH_SHORT).show(); listview = (ListView) findViewById(R.id.listView); myAdapter = new MyAdapter(cfo, this); listview.setAdapter(myAdapter); } public class MyAdapter extends ArrayAdapter<CheckBoxInfo> { private List<CheckBoxInfo> checkBoxList; private Context context; public MyAdapter(List<CheckBoxInfo> infoList, Context context) { super(context, R.layout.row_layout, infoList); this.checkBoxList = infoList; this.context = context; } public View getView(int position, View convertView, ViewGroup parent) { // First let''s verify the convertView is not null if (convertView == null) { // This a new view we inflate the new layout LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.row_layout, parent, false); } // Now we can fill the layout with the right values TextView tv = (TextView) convertView.findViewById(R.id.textView1); CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1); CheckBoxInfo cbi = checkBoxList.get(position); Toast.makeText(MainActivity.this, "position: " + position, Toast.LENGTH_SHORT).show(); tv.setText(cbi.checkBoxName); return convertView; } } // end MyAdapter }

row_layout.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <CheckBox android:id="@+id/checkBox1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" " /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout>


Anular getCount en su MyAdapter

public int getCount() { return infoList == null ? 0 : infoList.size(); }


Por favor, muestre el código de row_layout , creo que su error es for bucle:

Intente crear 2 casillas de verificación y agregue un manual para probar:

cbr1 = new CheckBoxInfo(); cbr1.checkBoxName = "checkbox1"; cbr1.checkBoxState = true; cfo.add(cbr1); cbr2 = new CheckBoxInfo(); cbr2.checkBoxName = "checkbox2"; cbr2.checkBoxState = true; cfo.add(cbr2);


Tuve este problema porque mi notifyDataSetChanged() estaba dentro de un bucle y no fue llamado en ciertas circunstancias (si no hubiera elementos de datos).

¡Asegúrate de que notifyDataSetChanged() cuando debería ser!


android: fillViewport = "true" en ScrollView resolverá el problema.


descubrí que el problema era que el ListView estaba dentro de un ScrollView en el diseño xml, una vez que quité el ScrollView externo, todos los elementos del ListView aparecieron.

por alguna razón, si encapsula un ListView anidado en varias capas, solo mostrará un elemento de posición si el ListView está dentro de un ScrollView