Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

arrayAdapter only returning one position, Android

I set the arrayList to 12 items, however the arrayAdapter only returns one item on the screen, why is this? It is supposed to show 12 items on the list.

  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>
like image 294
Kevik Avatar asked Apr 08 '13 09:04

Kevik


2 Answers

found out that the problem was the ListView was inside a ScrollView in the xml Layout, once i removed the outer ScrollView all the items of the ListView showed up.

for some reason if you encapsulate a ListView nested in several layers it will show only one position item if the ListView in inside a ScrollView

like image 169
Kevik Avatar answered Oct 19 '22 17:10

Kevik


Override getCount in your MyAdapter

public int getCount() {
   return infoList == null ? 0 : infoList.size();
}
like image 42
Nermeen Avatar answered Oct 19 '22 17:10

Nermeen