2013-02-15 93 views
1

基于一些教程,我尝试着做一个简单的android应用程序,它显示一个带有字符串的列表。 问题是当我试图向列表项目引入新布局时。带有多个列表项目布局的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与一个TextView布局)

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; 
} 
} 

正如你所看到的,dependi在项目上(真或假),我改变了布局。

任何输入将非常感激!

顺便说一句,这是什么,我试图做一个简单的例子...

+0

取而代之,您可以在视图中使用相同的布局和可见性。这种设计很简单。如果你需要他们,然后使其可见,否则奇怪的是使其隐形 – 2013-02-15 12:52:09

回答

1

请重写getViewTypeCount()getItemViewType(int)方法了。它应该工作。也请通过这个链接Android ListView with different layouts for each row

+0

,添加这些方法覆盖工作。没有更多的项目争先恐后:)。 – 2013-02-15 13:10:59

相关问题