package cc.testlistview;
import java.util.ArrayList;
import java.util.HashMap;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.app.Activity;
/** * Demo描述:
* 为ListView的Item设置不同的布局.
* 例如在该例子中ListView的第一个Item显示一张
* 图片,其余的Item都显示文字.
*
* 为了达到此目的需要重写BaseAdapter中的
* 1 getViewTypeCount()和getItemViewType(int position)方法.
* 1.1在getViewTypeCount中指定一共有几种不同的item
* 在此返回2即可.
* 1.2在getItemViewType(int position)中需要依据position的不同
* 返回不同的Type.
* 2 在getView()方法中针对不同的Type为Item设置布局
* 2.1得到当前位置(position)时的Type即代码:
* currentType= getItemViewType(position);
* 2.2依据Type的不同为Item设置布局
*
* 参考资料:
* Thank you very much
*/ public class MainActivity extends Activity {
private ListView mListView;
private HashMap<String, Object> mHashMap;
private ArrayList<HashMap<String, Object>> mArrayList;
@Override protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
mArrayList= new ArrayList<HashMap<String,Object>>();
mListView=(ListView) findViewById(R.id.listview);
addDataForListView();
mListView.setAdapter
( new ListViewAdapter(MainActivity. this , mArrayList, R.layout.othersitem, new String []{ "content" }, new int []{R.id.textView}));
mListView.setOnItemClickListener( new ItemClickListenerImpl());
}
private void addDataForListView(){
for ( int i = 0 ; i < 30 ; i++) {
mHashMap= new HashMap<String, Object>();
mHashMap.put( "content" , "This is ---> " +i);
mArrayList.add(mHashMap);
}
}
private class ItemClickListenerImpl implements OnItemClickListener {
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long arg) {
System.out.println( "OnItemClickListener position=" +position);
}
}
} |
ListViewAdapter如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
package cc.testlistview;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ListViewAdapter extends BaseAdapter {
private List<? extends Map<String, ?>> mArrayList;
private int resource;
private LayoutInflater mLayoutInflater;
private final int TYPE_COUNT= 2 ;
private final int FIRST_TYPE= 0 ;
private final int OTHERS_TYPE= 1 ;
private int currentType;
public ListViewAdapter(Context context,List<? extends Map<String, ?>> data, int resource, String[] from, int [] to) {
this .mArrayList=data;
this .resource=resource;
mLayoutInflater=(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
}
@Override public int getCount() {
if (mArrayList== null ) {
return 0 ;
} else {
return (mArrayList.size()+ 1 );
}
}
@Override public Object getItem( int position) {
if (mArrayList== null ) {
return null ;
} else {
if (position> 0 ) {
return mArrayList.get(position- 1 );
} else {
return mArrayList.get(position+ 1 );
}
}
}
@Override public long getItemId( int position) {
return position;
}
///////////////////////////////////////////////////////
@Override public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override public int getItemViewType( int position) {
if (position== 0 ) {
return FIRST_TYPE;
} else {
return OTHERS_TYPE;
}
}
///////////////////////////////////////////////////////
@Override public View getView( int position, View convertView, ViewGroup parent) {
View firstItemView = null ;
View othersItemView= null ;
//获取到当前位置所对应的Type
currentType= getItemViewType(position);
System.out.println( "type=" +currentType);
if (currentType== FIRST_TYPE) {
firstItemView = convertView;
FirstItemViewHolder firstItemViewHolder= null ;
if (firstItemView== null ) {
System.out.println( "firstItemView==null " );
firstItemView = mLayoutInflater.inflate(R.layout.firstitem, null );
firstItemView.setOnClickListener( new OnClickListener() {
@Override public void onClick(View view) {
System.out.println( "=====click first item=======" );
}
});
firstItemViewHolder= new FirstItemViewHolder();
firstItemViewHolder.imageView=(ImageView) firstItemView.findViewById(R.id.imageView);
firstItemView.setTag(firstItemViewHolder);
} else {
System.out.println( "firstItemView!=null " );
System.out.println( "111 getClass=" +firstItemView.getTag().getClass().toString());
firstItemViewHolder=(FirstItemViewHolder) firstItemView.getTag();
}
if (firstItemViewHolder.imageView!= null ) {
firstItemViewHolder.imageView.setImageResource(R.drawable.ic_launcher);
}
convertView=firstItemView;
} else {
othersItemView = convertView;
OthersViewHolder othersViewHolder= null ;
if (othersItemView== null ) {
System.out.println( "othersItemView==null " );
othersItemView = mLayoutInflater.inflate(R.layout.othersitem, null );
othersViewHolder= new OthersViewHolder();
othersViewHolder.textView=(TextView) othersItemView.findViewById(R.id.textView);
othersItemView.setTag(othersViewHolder);
} else {
System.out.println( "othersItemView!=null " );
System.out.println( "222 getClass=" +othersItemView.getTag().getClass().toString());
othersViewHolder=(OthersViewHolder) othersItemView.getTag();
}
if (mArrayList!= null ) {
if (othersViewHolder.textView!= null ) {
othersViewHolder.textView.setText((String)(mArrayList.get(position- 1 ).get( "content" )));
}
}
convertView=othersItemView;
}
return convertView;
}
//第一个Item的ViewHolder
private class FirstItemViewHolder{
ImageView imageView;
}
//除第一个Item以外其余Item的ViewHolder
private class OthersViewHolder{
TextView textView;
}
} |
相关推荐
在许多场景下,开发者需要在ListView中显示不同的布局,比如在一个消息列表中,上行消息与下行消息的布局可能不同,这就是所谓的“聊天布局”。本篇将详细介绍如何在Android的ListView中实现这种功能,并基于提供的...
总之,为ListView的每个Item的按钮添加事件并获取TextView文本,关键在于适当地设置OnClickListener,并在点击事件中正确地定位和获取对应的TextView。记得在Adapter的getView()方法中进行这些操作,确保每个Item的...
本篇文章将深入探讨如何在ListView的内部Item布局中添加并处理Checkbox控件。 首先,我们需要创建一个自定义的布局文件,用于定义ListView的每个Item。这个布局文件通常会包含一个TextView用于显示数据,以及一个...
总结起来,创建一个Android的网格布局ListView主要涉及以下几个步骤:设计网格项布局、创建自定义Adapter、在Activity中设置GridView并加载数据。通过灵活地调整布局和Adapter,你可以实现各种复杂的网格布局效果。...
标题"android 修改listview的不同item字体的颜色"和描述"改代码主要是针对listview修改指定item字体颜色"都指向了这个主题。下面我们将详细探讨如何实现这一功能。 首先,我们需要理解ListView的基本工作原理。...
最后,确保你的item布局具有适当的触摸监听器,以便在合适的时刻响应拖放操作。这通常涉及到在item的根布局上设置`TouchListener`,并在`onTouchEvent()`中调用`listView.startDrag()`。 通过以上步骤,你就可以在...
总结,Android中的ListView通过自定义Adapter和多种视图类型,能够灵活地展示不同样式的item,提高了用户体验。理解并熟练运用这项技术对于Android开发者来说非常重要。在实际开发中,我们应结合具体需求,合理设计...
然后在ListView的item布局文件中,将这个选择器作为背景: ```xml <!-- res/layout/item_layout.xml --> android:layout_width="match_parent" android:layout_height="wrap_content" android:background=...
在这个场景中,我们将关注如何在ListView中实现不同类型的Item布局,特别是在模拟聊天界面时,通常需要显示发送和接收两类消息,这两类消息的布局会有所不同。 首先,我们需要理解`BaseAdapter`,它是Android提供的...
接下来,我们需要为这两个ListView分别创建Adapter,并在代码中设置它们。对于父ListView的Adapter,你需要提供一个包含子ListView数据的列表。当调用getView()方法时,根据数据创建或复用一个View,并在这个View中...
总结来说,"listView item不同布局demo"是一个展示如何在ListView中实现多类型item布局的实例,通过自定义Adapter和复写关键方法,我们可以灵活地控制ListView每一项的显示样式,从而满足各种复杂的需求。...
这就涉及到了“android ListView Item展开效果”的实现。 ListView的Item展开效果通常通过使用ExpandableListView来实现。ExpandableListView是ListView的一个扩展,它不仅支持普通的单行显示,还能处理分组(Group...
本文实例讲述了Android编程...一开始想着是不是能在list item的布局给上层布局添加一个: android:clickable=false android:focusable=false 就是禁止点击,但试了试没有效果,后来师傅提醒我,我的这个listview使
"Android ListView adapter不同布局"这个主题就是关于如何在ListView中实现这样的功能。 首先,我们了解ListView的工作原理。ListView依赖于Adapter来填充数据。Adapter就像一个桥梁,连接数据源(如ArrayList)和...
总之,在Android中实现ListView的Item显示不同布局,需要通过自定义Adapter,根据数据源动态加载不同的布局文件,并填充对应的内容。熟练掌握这一技巧,将有助于你构建更加丰富、灵活的用户界面。
然而,有时我们不仅仅满足于单一的列表项布局,而是希望在同一个ListView中展示多种不同的布局,这就是所谓的"ListView Item多布局"。这种功能可以使得应用界面更加丰富多彩,提供更好的用户体验。本文将详细介绍...
本篇将深入讲解如何在Android中创建一个ListView,并实现它包含多个不同类型的Item。 1. **ListView基本结构** ListView由一系列的View(Item)组成,每个View代表数据集中的一个条目。这些Item通过Adapter进行...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在实际应用中,我们经常需要实现点击ListView的某一项(item)时,该item能够展开显示更多的内容,例如子列表或者详细信息。这个功能可以通过...
3. 自定义Item布局: 默认的选中效果可能并不符合所有设计需求,所以可能需要自定义Item的布局。在XML布局文件中,我们可以为选中状态定义不同的背景颜色、边框等样式,然后在`getView()`方法中根据选中状态应用...