8

我想创建 Listview,在其中我想要所有不同行的不同布局。那么如何创建自定义适配器来为不同的行设置不同的布局。

任何帮助将不胜感激。

先感谢您。

4

2 回答 2

9

您需要扩展您的Adapter, 并覆盖其getView方法。

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    int resource;

    // Here you set ‘resource’ with the correct layout, for the row
    // given by the parameter ‘position.’
    //
    // E.g.:
    //
    // switch (someArray[position].type) {
    //   case SOME_TYPE_A: resource = R.layout.a; break;
    //   case SOME_TYPE_B: resource = R.layout.b; break;
    //   ...
    // }

    View rowView = inflater.inflate(resource, parent, false);

    // Here you initialize the contents of the newly created view.
    //
    // E.g.:
    // switch (resource) {
    //   case R.layout.a:
    //      TextView aA = (TextView) rowView.findViewById(R.id.aa);
    //      aA.setText("View 1");
    //      ...
    //      break;
    //   case R.layout.b:
    //      TextView bB = (TextView) rowView.findViewById(R.id.bb);
    //      bB.setText("View 2");
    //      ...
    //      break;
    //   ...
    // }

    return rowView;
}

有关适配器的更多示例以及如何扩展它们,请参阅下面的链接。

于 2013-11-01T11:08:55.683 回答
7

创建常规适配器,在 create_view 函数中根据行类型膨胀行 xml 布局。

例如

@Override   
public View getView(int position, View convertView, ViewGroup parent) {
     LayoutInflater inflater = (LayoutInflater) context
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

     if (position % 2 == 0 )
        xml_type = R.layout.row_one
     else
         xml_type = R.layout.row_two

     View rowView = inflater.inflate(xml_type, parent, false);
}
于 2013-11-01T09:15:54.390 回答