作者:广东工业大学普通话_333 | 来源:互联网 | 2023-07-12 16:38
今天来跟大家讨论下同一个ListView如何加载不同的布局。老规矩,先来看效果图。主要步骤如下1.增加Type。2.重写getViewTypeCount方法。3.
今天来跟大家讨论下同一个ListView如何加载不同的布局。
老规矩,先来看效果图。
主要步骤如下
- 1.增加Type。
- 2.重写getViewTypeCount方法。
3.重写getItemViewType方法。
4.重写getView方法。
1.增加Type
我们这里只有2种type;故
private final int TYPE_01 = 0;
private final int TYPE_02 = 1;
2.重写getViewTypeCount方法。因为只有2个,所以这里直接返回2了。
@Override
public int getViewTypeCount() {
return 2;
}
3.重写getItemViewType方法。
这里是根据不同的pos来判断布局。
@Override
public int getItemViewType(int position) {
if(position==0) return TYPE_01;
else
return TYPE_02;
}
4.重写getView
跟普通的getView一样,只不过多了一个switch的过程
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder=null;
int type = getItemViewType(i);
if(view == null){
switch (type){
case TYPE_01:
view = mInflater.inflate(R.layout.item_main_top,null);
final Switch mSwitch = (Switch) view.findViewById(R.id.switch_list_main);
}
} else {
break;
case TYPE_02:
view = mInflater.inflate(R.layout.item_main,null);
viewHolder = new ViewHolder();
viewHolder.mTextView = (TextView) view.findViewById(R.id.textView_item_main);
view.setTag(viewHolder);
break;
}
}else{
switch (type){
case TYPE_02:
viewHolder = (ViewHolder) view.getTag();
break;
}
}
switch(type) {
case TYPE_02:
viewHolder.mTextView.setText(mStringArr[i-1]);
break;
}
return view;
}
这样便可对ListView加载不同Type的布局。