Android Listview每行有不同的布局?

时间:2013-11-01 08:33:16

标签: android android-layout

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

非常感谢任何帮助。

先谢谢你。

2 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分: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);
}