『壹』 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的布局,然後可以在裡面進行布局的更改。