18

我将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>
4

5 回答 5

67

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

出于某种原因,如果您封装嵌套在多个层中的 ListView,如果 ListView 在 ScrollView 内,它将仅显示一个位置项

于 2013-04-09T06:01:14.213 回答
2

覆盖getCount你的MyAdapter

public int getCount() {
   return infoList == null ? 0 : infoList.size();
}
于 2013-04-08T09:22:43.807 回答
1

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

尝试创建 2 个复选框并添加手册进行测试:

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

cbr2 = new CheckBoxInfo();
cbr2.checkBoxName = "checkbox2";
cbr2.checkBoxState = true;
cfo.add(cbr2);
于 2013-04-08T09:25:34.093 回答
1

I had this problem because my notifyDataSetChanged() was inside a loop and wasn't being called in certain circumstances (if there were no data items).

Make sure notifyDataSetChanged() is getting called when it should be!

于 2017-08-22T16:58:35.457 回答
0

android:fillViewport="true" on ScrollView will solve the problem.

于 2018-02-13T22:45:30.643 回答