具有2列的自定义GridAdapter不起作用

时间:2013-04-25 20:54:38

标签: android gridview android-gridview android-gridlayout

我想实现一个接收ArrayList Element2S的网格适配器,其中Element2S是一个带有两个String的自定义对象(Element2S(String a,String b)

GridAdapter应使用Element2S ArrayList填充网格。 String对象的第一个Element2S应该是第一个列元素,第二个元素的第二个String Element2S

我的GridAdapter是:

public class GridViewAdapterC2 extends BaseAdapter {

        private ArrayList<Element2S> itemList;
        private Activity activity;

        public GridViewAdapterC2(Activity activity,
                ArrayList<Element2S> itemList) {
            super();
            this.itemList = itemList;
            this.activity = activity;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return itemList.size();
        }

        @Override
        public Element2S getItem(int position) {
            // TODO Auto-generated method stub
            return itemList.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        public static class ViewHolder {
            public TextView txtViewColumn1;
            public TextView txtViewColumn2;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder view;
            LayoutInflater inflator = activity.getLayoutInflater();

            if (convertView == null) {
                view = new ViewHolder();
                convertView = inflator.inflate(R.layout.grid_row_2c, null);

                view.txtViewColumn1 = (TextView) convertView
                        .findViewById(R.id.col1);
                view.txtViewColumn2 = (TextView) convertView
                        .findViewById(R.id.col2);

                convertView.setTag(view);
            } else {
                view = (ViewHolder) convertView.getTag();
            }

            String textCoilumn1 = itemList.get(position).getA();
            String textCoilumn2 = itemList.get(position).getB();
            view.txtViewColumn1.setText(textCoilumn1);
            view.txtViewColumn2.setText(textCoilumn2);

            return convertView;
        }

    }

不幸的是,在主要版本中我尝试使用此适配器

gridAdapter = new GridViewAdapterC2(this, myItemArrayList);
mygrid= (GridView) findViewById(R.id.myGridView);
mygrid.setAdapter(gridAdapter);

结果是错误的。

我的gridRow布局是

<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <TableRow android:layout_gravity="left">

  <TextView
      android:id="@+id/col1"
      android:layout_width="50dp"
      android:layout_height="wrap_content"
      android:layout_gravity="left"
      android:gravity="left|start"
      android:padding="5dp"
      android:textColor="@color/light_sky"
      android:textSize="12sp" />

  <TextView
      android:id="@+id/col2"
      android:layout_width="50dp"
      android:layout_height="wrap_content"
      android:layout_gravity="left"
      android:gravity="left|start"
      android:padding="5dp"
      android:textColor="@color/green_2"
      android:textSize="12sp" >
  </TextView>

 </TableRow>
</TableLayout>

主要活动中的myGridView布局是

<GridView
     android:id="@+id/myGridView"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_gravity="center_horizontal"
     android:layout_marginLeft="50dp"
     android:layout_marginRight="50dp"
     android:gravity="center_horizontal"
     android:numColumns="2" >
</GridView>

我无法弄清楚出了什么问题。

如果我的Elements2S arraylist是

 1st element2S:   (1,23a)
 2nd element2S:   (2,15b)
 3rd element2S:   (3,22c)

网格显示

1   2
3

但正确的输出是

  1   23a
  2   15b
  3   22c

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下ListView优于GridView。

我认为LinearLayout优于TableLayout。

您的输出错误,因为网格单元格的某些区域被其他区域覆盖。尝试调整单元格和网格的大小。