android listView 控件单击事件
2013-07-29 10:37
309 查看
其实大部分内容也是从网上找的,找回之后整理了一下,记录下来给自己添记性啦!
首先:在activity文件中添加listview
main.xml
然后是添加listview的布局文件
main_item.xml
然后是处理代码了
mainActivity.java
定义控件:
添加listview项
自定义adapter
这样,基本就可以了,但是要注意的是,非常重要的是:
listView布局文件中控件一定要加上android:focusable="false"
然后在文件最外面,一定要加上android:descendantFocusability="blocksDescendants"
详细请看上文中的布局文件. 否则listview单击事件将会无效!
运行效果如图:
首先:在activity文件中添加listview
main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#f0f0e0" > <RelativeLayout android:id="@+id/rl_top" android:layout_width="fill_parent" android:layout_alignParentTop="true" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="44dp" android:gravity="center" android:textSize="18sp" android:background="#486a9a" android:textColor="@android:color/white" android:text="欢迎使用"/> </RelativeLayout> <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@id/rl_top" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:cacheColorHint="#00000000" android:divider="@null" android:listSelector="#00000000" android:dividerHeight="3dp"/> </RelativeLayout>
然后是添加listview的布局文件
main_item.xml
?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="vertical" android:paddingBottom="5dp" android:descendantFocusability="blocksDescendants" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" > <ImageView android:id="@+id/iv_user_image" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:background="@drawable/mypic" /> <ImageView android:id="@+id/iv_run" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="@drawable/run" /> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_toRightOf="@+id/iv_user_image" android:layout_toLeftOf="@id/iv_run" android:background="@drawable/chatfrom_bg" android:gravity="center" android:clickable="true" android:focusable="false" android:lineSpacingExtra="2dp" android:minHeight="50dp" android:textColor="#ff000000" android:textSize="14sp" /> </RelativeLayout> </LinearLayout>
然后是处理代码了
mainActivity.java
定义控件:
private ListView chatListView = null; private List<ChatEntity> chatList = null; private ChatAdapter chatAdapter = null;
添加listview项
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); chatListView = (ListView) this.findViewById(R.id.listview); chatList = new ArrayList<ChatEntity>(); SetChatList(); chatAdapter = new ChatAdapter(this,chatList); chatListView.setAdapter(chatAdapter); } private void SetChatList()//这个里添加列表项,也可以从数据库中插入 { /*chatList.add(NewChatEntity("gif.dm.activity","",true)); chatList.add(NewChatEntity("gif.dm_structure.activity","",false)); chatList.add(NewChatEntity("gif.dm_rebound.activity","",true)); chatList.add(NewChatEntity("gif.dm_low_strain.activity","",false)); chatList.add(NewChatEntity("gif.dm_ultrasonic.activity","",true));*/ chatList.add(NewChatEntity("gif.dm.activity","")); chatList.add(NewChatEntity("gif.dm_structure.activity","")); chatList.add(NewChatEntity("gif.dm_rebound.activity","")); chatList.add(NewChatEntity("gif.dm_low_strain.activity","")); chatList.add(NewChatEntity("gif.dm_ultrasonic.activity","")); }
自定义adapter
private class ChatAdapter extends BaseAdapter{ private Context context = null; private List<ChatEntity> chatList = null; private LayoutInflater inflater = null; private int COME_MSG = 0; private int TO_MSG = 1; public ChatAdapter(Context context,List<ChatEntity> chatList){ this.context = context; this.chatList = chatList; inflater = LayoutInflater.from(this.context); } @Override public int getCount() { return chatList.size(); } @Override public Object getItem(int position) { return chatList.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { // 区别两种view的类型,标注两个不同的变量来分别表示各自的类型 ChatEntity entity = chatList.get(position); if (entity.isComeMsg()) { return COME_MSG; }else{ return TO_MSG; } } @Override public int getViewTypeCount() { // 这个方法默认返回1,如果希望listview的item都是一样的就返回1,我们这里有两种风格,返回2 return 2; } @Override public View getView(int position, View convertView, ViewGroup parent) { //ChatHolder chatHolder = null; ChatHolder1 chatHolder = null; if (convertView == null) { chatHolder = new ChatHolder1(); if (chatList.get(position).isComeMsg()) { //convertView = inflater.inflate(R.layout.chat_from_item, null); convertView = inflater.inflate(R.layout.main_item, null); }else { //convertView = inflater.inflate(R.layout.chat_to_item, null); convertView = inflater.inflate(R.layout.main_item_r, null); } //chatHolder.timeTextView = (TextView) convertView.findViewById(R.id.tv_time); chatHolder.flagView = (ImageView) convertView.findViewById(R.id.iv_run); chatHolder.contentTextView = (TextView) convertView.findViewById(R.id.tv_content); chatHolder.userImageView = (ImageView) convertView.findViewById(R.id.iv_user_image); convertView.setTag(chatHolder); }else { //chatHolder = (ChatHolder)convertView.getTag(); chatHolder = (ChatHolder1)convertView.getTag(); } //chatHolder.timeTextView.setText(chatList.get(position).getChatTime()); chatHolder.contentTextView.setText(chatList.get(position).getContent()); chatHolder.userImageView.setImageResource(chatList.get(position).getUserImage()); final String packageName = chatList.get(position).getAppName(); final int pos = position; chatHolder.contentTextView.setOnClickListener(new OnClickListener(){//这就就是控件单击事件处理函数了! @Override public void onClick(View v) { // TODO Auto-generated method stub //Toast.makeText(context, appName.substring(0,i), Toast.LENGTH_SHORT).show(); if (chatList.get(pos).isComeMsg()) { FrameLogic.RunActivity(packageName,context); Exit(); } else { new AlertDialog.Builder(context).setTitle("错误").setMessage("模块不存在,请先下载安装该模块!").show(); } } }); return convertView; } } private class ChatHolder{ private TextView timeTextView; private ImageView userImageView; private TextView contentTextView; }
这样,基本就可以了,但是要注意的是,非常重要的是:
listView布局文件中控件一定要加上android:focusable="false"
然后在文件最外面,一定要加上android:descendantFocusability="blocksDescendants"
详细请看上文中的布局文件. 否则listview单击事件将会无效!
运行效果如图:
相关文章推荐
- android ListView控件操作绑定数据、单击事件
- Android如何让ListView的子组件按钮响应单击事件并修改该项子控件内容
- android listview第一个子项内部控件的单击事件阻塞。。
- Android中对GridView, ListView等滚动控件的Touch事件onInterceptTouchEvent,onTouchEvent了解
- Android自定义ListView单击事件失效的解决方法
- Android中ListView实现子控件点击事件后ListView点击事件失效解决办法
- Android界面控件(5)—ListView子项的事件监听器
- Android中listview中条目及控件点击事件position位置不对
- android listView里的imageView无法响应单击事件的解决
- Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件
- [转]Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件
- android listview单击事件
- ListView的item单击事件与item布局中控件单击事件的冲突问题
- Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法
- android listview长按,单击各种事件捕捉
- Android ListView的Item点击事件和Item里控件点击事件冲突问题解决
- Android通过请求网络数据实现ListView,ListView的优化、图片的缓存、子控件的点击事件。
- Android ListView从SQLLite中读取数据并显示,响应单击事件
- 我的Android进阶之旅------>Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法
- .Net程序员玩转Android开发---(13)ListView单击事件