【问题标题】:Android list with multiple list item layouts具有多个列表项布局的 Android 列表
【发布时间】:2013-02-15 12:45:14
【问题描述】:

根据一些教程,我尝试做一个简单的 android 应用程序,它显示一个带有字符串的列表。 问题是当我尝试向列表项引入新布局时。

所以你会有:

listItem1 -> 布局1

listItem2 -> 布局2

listItem3 -> 布局1

当我尝试添加新布局时,我的项目在滚动时变得“乱码”。例如,它会显示 item1, item2, item3, item4... ,当向下滚动并返回时,我的列表将是:item40, item3, item20, item1 等

这是我的代码:

(activity_main.xml 文件有一个 LinearLayout > ListView)

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    items = new ArrayList<String>();
    for (int i = 0; i < 50; i++){
        items.add(i%2==0 ? "true" : "false");
    }

    ListView listView = (ListView) findViewById(R.id.ListViewId);
    listView.setAdapter(new ListItemAdapter(this, android.R.layout.simple_list_item_1, items));

}

(list_item_1 和 list_item_2 是带有文本视图的布局)

public class ListItemAdapter extends ArrayAdapter<String> {
private ArrayList<String> items;
private LayoutInflater mInflater;

public ListItemAdapter(Context context, int textViewResourceId,
        ArrayList<String> items) {
    super(context, textViewResourceId, items);
    this.items = items;
    mInflater = (LayoutInflater)this.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    int type = items.get(position).equals("true") ? 0 : 1;
    if (convertView == null) {
        switch(type){
        case 1:
            convertView = mInflater.inflate(R.layout.list_item_1, null);
            break;
        case 0:
            convertView = mInflater.inflate(R.layout.list_item_2, null);
            break;
        }

    }
    String item = items.get(position);
    if (item != null) {
        switch(type){
        case 1:
            TextView text = (TextView) convertView.findViewById(R.id.day);
            if (text != null) {
                text.setText(item);
            }           
            break;
        case 0:
            TextView day = (TextView) convertView.findViewById(R.id.text);

            if (day != null) {
                day.setText(item);
            }
            break;
        }

    }

    return convertView;
}
}

如您所见,根据项目(真或假),我更改布局。

任何意见将不胜感激!

顺便说一句,这是我正在尝试做的一个简化示例...

【问题讨论】:

  • 您可以在视图中使用相同的布局和可见性来代替它。这种设计很简单。如果您需要它们,则使其可见,否则使其不可见

标签: android


【解决方案1】:

请也覆盖 getViewTypeCount()getItemViewType(int) 方法。它应该工作。也请通过此链接Android ListView with different layouts for each row

【讨论】:

  • 奇怪的是,添加这些方法覆盖有效。没有更多的项目为我打乱:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
相关资源
最近更新 更多