‘壹’ android如何在listview里给每个条目设置布局
可以为listview设置自定义的Adapter,该自定义Adapter继承BaseAdapter
java">{
@Override
publicintgetCount(){
//TODOAuto-generatedmethodstub
returnlist!=null?list.size():0;
}
@Override
publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
returnlist.get(position);
}
@Override
publiclonggetItemId(intposition){
//TODOAuto-generatedmethodstub
returnposition;
}
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
//TODOAuto-generatedmethodstub
Viewv=getLayoutInflater().inflate(R.layout.data_list,null);
TextViewname=(TextView)v.findViewById(R.id.name);
name.setText((String)list.get(position).get("name"));
returnv;
}
}
其中getView方法可以通过getLayoutInflater().inflate()方法为每个条目设置不同的布局。
‘贰’ android 怎么实现listview多种布局
1)重写 getViewTypeCount() – 该方法返回多少个不同的布局
2)重写 getItemViewType(int) – 根据position返回相应的Item
‘叁’ android listview有多种布局
这需要自定义listView,自定义一个类继承baseadapter,然后在布局里再建一个xml文件,比如item.xml,在item.xml里定义两个textview.两个textview放在横向线性布局里,字体颜色和位置就很简单啦,然后把内容写在自定义的listview里就ok了。
‘肆’ Android ListView 自定义Adapter,条件选择两个布局样式,怎么用 convertView
不太清楚你的意思,说下我的思路给你参考下吧。
如果你收发消息仅仅是背景不同,完全没必要用两个布局,实例化后用setBackgroundResource就行了。
if(convertView==null){
linearLayout=(LinearLayout)LayoutInflater.from(context).inflate(R.layout.msg_list_item_1,null);
}else{
linearLayout=(LinearLayout)convertView;
}
switch(message.getAuthorType()){
case1:
linearLayout.setBackgroundResource(R.drawable.背景1);
break;
case2:
linearLayout.setBackgroundResource(R.drawable.背景2);
break;
}
TextViewcontent=(TextView)linearLayout.findViewById(R.id.tvContent);
content.setText(message.getContent());
如果布局差异比较大,你可以试试在你的Adapter中定义全局变量linearLayout1,linearLayout2,然后构造时初始化,linearLayout1 =(LinearLayout)LayoutInflater.from(context).inflate(R.layout.msg_list_item_1,null);
linearLayout2 =(LinearLayout)LayoutInflater.from(context).inflate(R.layout.msg_list_item_2,null);
最后在getView方法中,不要用convertView == null判断,直接根据条件让convertView =linearLayout1或linearLayout2。不过这方法我没实际试过,不一定好用就是了。
‘伍’ android怎么做布局不一样的listview
listView里的每个元素布局都是一样的,不可能有差异。它就是个集合,一个list,每个元素的类型和格式必然相同。
‘陆’ android 一个listview中有多个布局切换
如果布局不是很多的话,可以写在同一个Item中,然后根据不同的情况,在adapter 的getView中对不同布局的显隐性进行变更。从而实现一个listView有多种布局。这个我之前实践过。可行的。希望这个思路能帮到您。
‘柒’ android listview两种布局,一种单选一种多选,怎样获得选中状态,并存入数据库
setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); // 多选
setChoiceMode(ListView.CHOICE_MODE_SINGLE) // 单选
选择后的效果是要子view支持才可以的。需要checkable的子view才可以,如果你是普通的textview之类的。。可能选中和不选中效果是一样的。
至于写入数据库,android上用sqlite。。。
‘捌’ android ListView 使用BaseAdapter 绑定不同的layout布局。
重写
@Override
public int getItemViewType(int position) {//定义不同位置的convertView类型
// TODO Auto-generated method stub
if(position==0){
return 0;
}else{
return 1;
}
}
@Override
public int getViewTypeCount() {//convertView总共类型。默认为1
// TODO Auto-generated method stub
return 2;//返回2,表示有2种。你目前只用了2种
}
重写这2个方法后,挡在你的position=4时,由于getItemViewType=1;所以他会复用的convertView是其他getItemViewType=1的时候产生的,也就是第二个布局,就不会是第一个了
‘玖’ android中listView怎么复用多种布局
adapter填充数据的时候,我们一般要实现以下方法:
1 public int getCount(){ }
2 public Object getItem(int position) {}
3 public long getItemId(int position) {}
4 public View getView(int position, View view, ViewGroup viewGroup){}
但是要实现复用多种布局的话我们还要实现下面2个方法
1 public int getItemViewType(int position) {}
返回我们要复用的布局类型,假如我们要复用一个tab结构和item结构,我们可以这么来写
类别的数值在(0,类别总数-1)之间
public static final int TYPE_UNKNOW = 0;
public static final int TYPE_TAB = 1;
public static final int TYPE_LIST_ITEM = 2;
public static final int TYPE_MAX_COUNT = 3;
@Override
public int getItemViewType(int position) {
//复用tab结构
if (position == 1) {
return TYPE_TAB;
}
//复用一般的item结构
int size = CollectionUtils.size(feedDataList);
if (position >= 1 && size > 0 && position < (size + 2)) {
return TYPE_LIST_ITEM;
}
return TYPE_UNKNOW;
}
类别总数是3,类别对应的int值应该在0 - 2 之间,它们分别是
public static final int TYPE_UNKNOW = 0;
public static final int TYPE_TAB = 1;
public static final int TYPE_LIST_ITEM = 2;
2 public int getViewTypeCount() { } 返回复用布局的总数,这里是3
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
在adapter中的getView方法中,我们就可以这样来写:
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ItemViewHolder itemViewHolder;
TabViewHolder tabViewHolder;
int viewType= getItemViewType(position);
switch (viewType) {
case TYPE_TAB:
if(convertView == null ) {
tabViewHolder = new TabViewHolder(mContext);
//给contenView赋值,并给viewHolder设置tag
tabViewHolder.findView(position,convertView,viewGroup);
}else{
//直接复用
tabViewHolder = (TabViewHolder)convertView.getTag();
}
//这里是处理业务逻辑的方法
tabViewHolder.setView(position);
return tabViewHolder.layout;//返回convertView
case TYPE_LIST_ITEM:
if (convertView == null) {
itemViewHolder = new ItemViewHolder(mContext);
//给contenView赋值,并给viewHolder设置tag
itemViewHolder.findView(position, convertView, viewGroup);
} else {
//convertView不为空,直接复用
itemViewHolder = (ItemViewHolder) convertView.getTag();
}
//处理业务逻辑
itemViewHolder.setView((FeedComment)getItem(position));
return itemViewHolder.layout;//返回convertView
case TYPE_UNKNOW:
return null;
}
return null;
}
说明:处理复用多个布局的时候,如果不调用上面getViewTypeCount()和getItemType(),很容易就出现viewHolder类型转换错误。因为在屏幕滚动的时候,view.getTag()返回的viewHolder有2种,我们拿到的viewHolder可能就不是理想中的viewHolder,这个时候类型转换错误就出现了。
‘拾’ android中listView怎么复用多种布局
复用多种布局具体是什么样?一般是在item里添加布局的方式,listview里一般不做操作,重写Adapter,在里面的getview里获取item的布局,然后可以在里面进行布局的更改。