您的位置:首页 > 其它

Listview使用BaseAdapter添加不同布局

2016-06-18 10:18 369 查看
把生成的Demo演示放出来



操作步骤简单的分为两步

1.不同布局的XML文件

2.自定义BaseAdapter,重写方法

关键点:

1.在getItemViewType()方法中,根据点击的item下标,指定该下标将要加载的布局并返回该布局类型,就是例子中的XML_1。

2.在getview()方法中,根据getItemViewType()方法返回的布局类型进行加载。

3.加载完相应的布局之后,设置控件的显示内容或点击事件等。(例子中只给出了提示,没有详细实现。)。

public class MainActivity extends Activity {

ListView listView=null;
//item显示的内容
String[] listitemstr = {"item1", "item2", "item3", "item4", "item5", "item6"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定listview
listView= (ListView) findViewById(R.id.my_listview);
myBaseAdapter adapter=new myBaseAdapter(this);
listView.setAdapter(adapter);

}

//自定义BaseAdapter
private class myBaseAdapter extends BaseAdapter {
final int XML_1 = 0;
final int XML_2 = 1;
Context mcontext;
LinearLayout linearLayout = null;
LayoutInflater inflater;
public myBaseAdapter(Context context) {
mcontext = context;
inflater = LayoutInflater.from(mcontext);
}

@Override
public int getCount() {
//返回item的数量
return listitemstr.length;
}

@Override
public int getItemViewType(int position) {
//根据item的位置返回不同的布局,(这里是前两个返回XML1布局)
if(2>position){
return XML_1;
}else {
return XML_2;
}
}

@Override
public Object getItem(int position) {
//返回item的名字
return listitemstr[position];
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View view, ViewGroup viewGroup) {
//在这个方法中获取应该加载那种布局,然后加载相应的布局就可以了
viewHolder1 holder1 = null;
viewHolder2 holder2 = null;

//获取当前的类型
int type = getItemViewType(position);

if (null == view) {
//判断是哪种类型
switch (type) {
case XML_1:
//加载第一种item布局
view = inflater.inflate(R.layout.listview_item_textview, viewGroup, false);
holder1 = new viewHolder1();
holder1.item_one_textview = (TextView) view.findViewById(R.id.item_one_textview);
view.setTag(holder1);
break;
case XML_2:
view = inflater.inflate(R.layout.listview_item_textview_checkbox, viewGroup, false);
holder2 = new viewHolder2();
holder2.item_two_textview = (TextView) view.findViewById(R.id.item_two_textview);
holder2.item_two_checkbox = (CheckBox) view.findViewById(R.id.item_two_checkbox);
view.setTag(holder2);
break;
}
} else {
switch (type) {
case XML_1:
holder1 = (viewHolder1) view.getTag();
break;
case XML_2:
holder2 = (viewHolder2) view.getTag();
break;
}
}

switch (type){
case XML_1:
//设置item textview显示的内容
holder1.item_one_textview.setText(listitemstr[position]);
break;
case XML_2:
//设置item textview显示的内容 checkbox 全部选中
holder2.item_two_textview.setText(listitemstr[position]);
holder2.item_two_checkbox.setChecked(true);
//可以设置checkbox的点击事件
/*holder2.item_two_checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//如果是选中状态 装入一个map里面保存  不是选中状态 从map里面移除
}
});*/
break;
}

return view;
}
}

private class viewHolder1 {
TextView item_one_textview;

}

private class viewHolder2 {
TextView item_two_textview;
CheckBox item_two_checkbox;
}
}


Androidstudio的module文件百度云下载地址

链接:http://pan.baidu.com/s/1kUQj8OJ 密码:5h2q
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息