arrayAdapter只返回一个位置,Android

我将arrayList设置为12项,但是arrayAdapter只返回屏幕上的一个项目,为什么? 它应该显示在列表中的12个项目。

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> 

Solutions Collecting From Web of "arrayAdapter只返回一个位置,Android"

发现问题是ListView是在xml Layout中的ScrollView中,一旦我删除了外部ScrollView,ListView中的所有项目都显示出来了。

由于某种原因,如果你封装一个ListView嵌套在几个图层中,它将只显示一个位置项,如果ListView在一个ScrollView

MyAdapter覆盖getCount

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

请显示row_layout代码,我认为你的错误是for循环:

尝试创build2个checkbox,并添加手动testing:

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

我有这个问题,因为我的notifyDataSetChanged()是在一个循环内,并没有被调用在某些情况下(如果没有数据项)。

确保notifyDataSetChanged()被调用时它应该是!