listview怎么给listview更新指定itemm设定点击事件

8567人阅读
Android(55)
给Listview里面Item里的每一个控件怎么设定点击事件
adpter用的是继承的baseadapter,给整个listview上的Item设置点击事件就用listview.setOnItemClickListener(listener)就可以,下面介绍如果给Item里面某一控件设置点击事件。方法是重写&Adapter。
ListView工作原理(针对下面代码):
1.&给ListView设置数据适配器,此处程序是自己重写的Adapter,创建Adapter&的时候主要做下面的工作:
&&(1)把ListView需要显示的数据传给Adapter
&&(2)把ListView显示Item的界面传给Adapter
&&(3)把上下文对象传给Adapter,主要用来得到LayoutInflater对象来得到Item界面
2.&给ListView设置当点击Item对象的时候执行的操作,此处要实现给Item中的各项也就是该程序的三个TextView设置监听器,也就是调用Adapter中的getView函数。
3.&getView函数实现的操作是:第一要将Item要显示的数据显示,然后设置监听器,为监听器设置操作。
代码如下:
ListView中Item的布局文件
activity_my_goods_listview.xml
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:orientation=&horizontal& &
android:id = &@+id/goodBarcode&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:paddingTop=&10dip&
android:clickable=&true&//设置可点击
android:id=&@+id/goodName&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:paddingTop=&10dip&
android:clickable=&true&
android:id=&@+id/goodProvider&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:paddingTop=&10dip&
android:clickable=&true&
&/LinearLayout&
ListView控件所在的布局文件
activity_my_goods.xml
&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:background=&#ffffffff&
android:gravity=&center&
android:orientation=&vertical&&
&LinearLayout
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:orientation=&horizontal&
android:paddingLeft=&15px&
android:layout_marginLeft=&5dip&
android:layout_marginTop=&93dip&&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:text=&商品条码&
android:paddingTop=&10dip&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:text=&商品名称&
android:paddingTop=&10dip&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:text=&供应商&
android:paddingTop=&10dip&
&/LinearLayout&
&ScrollView
android:id=&@+id/feedbacklayout01&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:layout_marginTop=&103dip&
android:paddingTop=&20.0dip& &
&LinearLayout
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:orientation=&vertical&
android:paddingLeft=&20px&&
android:id=&@+id/goodsinfoListView&
android:layout_width=&wrap_content&
android:layout_height=&354dp&
android:layout_marginBottom=&5.0dip&
android:layout_marginRight=&5.0dip&
android:textColor=&#000&
android:textSize=&16.0dip&&
&/ListView&
&/ScrollView&
&/RelativeLayout&
重写Adapter类
MyGoodsAdapter.java
import java.util.L
import android.content.C
import android.view.LayoutI
import android.view.V
import android.view.View.OnClickL
import android.view.ViewG
import android.widget.BaseA
import android.widget.TextV
import android.widget.T
* 我的商品ListView的adapter。
public class MyGoodsAdapter extends BaseAdapter {
private List&Good&//ListView显示的数据
//显示列表项的Layout
private LayoutI//界面生成器
MyGoodsAdapter(List&Good& goods,int resource,Context context){
this.goods =
this.resource =
this.context =
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
public int getCount() {
return goods.size();
public Object getItem(int arg0) {
return goods.get(arg0);
public long getItemId(int arg0) {
return arg0;
public View getView(int arg0, View arg1, ViewGroup arg2) {
if(arg1 == null){
arg1 = inflater.inflate(resource, null);
final Good good = goods.get(arg0);
TextView goodBarcode =(TextView) arg1.findViewById(R.id.goodBarcode);
//设置ListView中的Item中的TextView
goodBarcode.setText(good.getGoodBarcode());
//为TextView设置监听器
goodBarcode.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
Toast.makeText(context, good.getGoodBarcode(), Toast.LENGTH_LONG).show();
TextView goodName =(TextView) arg1.findViewById(R.id.goodName);
goodName.setText(good.getGoodName());
goodName.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
Toast.makeText(context, good.getGoodName(), Toast.LENGTH_LONG).show();
TextView goodProvider =(TextView) arg1.findViewById(R.id.goodProvider);
goodProvider.setText(good.getGoodProvider());
goodProvider.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
Toast.makeText(context, good.getGoodProvider(), Toast.LENGTH_LONG).show();
return arg1;
Activity文件
MyGoodsActivity.java
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import android.os.B
import android.app.A
import android.content.I
import android.view.M
import android.view.V
import android.view.View.OnClickL
import android.widget.AdapterV
import android.widget.AdapterView.OnItemClickL
import android.widget.ListV
import android.widget.TextV
import android.widget.T
public class MyGoodsActivity extends Activity implements MeunOnClickListener{
private ListView goodsinfoListV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_goods);
// 获得ListView句柄
goodsinfoListView = (ListView)findViewById(R.id.goodsinfoListView);
final MyGoodsAdapter mgs = new MyGoodsAdapter(getListData(),R.layout.activity_my_goods_listview,this);
goodsinfoListView.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView&?& arg0, View arg1, int arg2,
long arg3) {
//int position =Integer.parseInt(arg1.getTag().toString());
mgs.getView(arg2, arg1, goodsinfoListView);
goodsinfoListView.setAdapter(mgs);
/*ListView数据*/
private List&Good& getListData() {
List&Good& list = new ArrayList&Good&();
Good good = new Good(&1111111&,&果冻&,&XXX区域代理商&);
list.add(good);
Good good1 = new Good(&2222222&,&营养快线&,&XXX区域代理商&);
list.add(good1);
Good good2 = new Good(&333333&,&豆干&,&XXX区域代理商&);
list.add(good2);
package net.aufo.apps.certclient.afterlogin.
public class Good {
private String goodB
private String goodN
private String goodP
public String getGoodBarcode() {
return goodB
public void setGoodBarcode(String goodBarcode) {
this.goodBarcode = goodB
public String getGoodName() {
return goodN
public void setGoodName(String goodName) {
this.goodName = goodN
public String getGoodProvider() {
return goodP
public void setGoodProvider(String goodProvider) {
this.goodProvider = goodP
public Good(String goodBarcode, String goodName, String goodProvider) {
this.goodBarcode = goodB
this.goodName = goodN
this.goodProvider = goodP
补充知识:
1.&getView函数介绍
public&abstract&&getView&(int&position,&&convertView,&&parent)
Get&a&View&that&displays&the&data&at&the&specified&position&in&the&data&set.&You&can&either&create&a&View&manually&or&inflate&it&from&an&XML&layout&file.&When&the&View&is&inflated,&the&parent&View&(GridView,&ListView...)&will&apply&default&layout&parameters&unless&you&use&&to&specify&a&root&view&and&to&prevent&attachment&to&the&root.
Parameters
The&position&of&the&item&within&the&adapter's&data&set&of&the&item&whose&view&we&want.
convertView
The&old&view&to&reuse,&if&possible.&Note:&You&should&check&that&this&view&is&non-null&and&of&an&appropriate&type&before&using.&If&it&is&not&possible&to&convert&this&view&to&display&the&correct&data,&this&method&can&create&a&new&view.&Heterogeneous&lists&can&specify&their&number&of&view&types,&so&that&this&View&is&always&of&the&right&type&(see&&and&).
The&parent&that&this&view&will&eventually&be&attached&to
&A&View&corresponding&to&the&data&at&the&specified&position.
position是指当前dataset的位置,通过getCount和getItem来使用。如果list向下滑动的话那么就是最低端的item的位置,如果是向上滑动的话那就是最上端的item的位置。conert是指可以重用的视图,即刚刚出队的视图。parent是list。
2.&获得ListView中点击的Item
在onClick(View&v)方法里面用
int&position&=Integer.parseInt(v.getTag().toString())就可以得到你当前点击的是哪一个条目&
3.&Adapter内的onItemClick监听器四个arg参数
public&void&onItemClick&(AdapterView&?&&parent,&View&view,&int&position,&long&id&)
&&&parent&相当于listview&Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X&-&-。
&&&&view&是你点b&item的view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件
&&&position&是b在Y适配器里的位置(生成listview时,适配器一个一个的做item,然后把他们按顺序排好队,在放到listview里,意思就是这个b是第position号做好的)
&&&id&是b在listview&Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的,如果需要的话,你可以自己加个log把position和id都弄出来在logcat里瞅瞅,看了之后心里才踏实。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:141880次
积分:2489
积分:2489
排名:第12134名
原创:106篇
转载:42篇
评论:13条
(2)(1)(3)(5)(1)(1)(5)(5)(4)(1)(1)(5)(14)(5)(4)(9)(11)(2)(3)(9)(7)(10)(19)(21)给Listview里面Item里的每一个控件怎么设定点击事件 - 推酷
给Listview里面Item里的每一个控件怎么设定点击事件
给Listview里面Item里的每一个控件怎么设定点击事件
adpter用的是继承的baseadapter,给整个listview
设置点击事件就用listview.setOnItemClickListener(listener)就可以,
tem里面某一
控件设置点击事件。方法是重写
&Adapter。
ListView工作原理(针对下面代码):
给ListView设置数据适配器,此处程序是自己重写的Adapter,创建Adapter&的时候主要做下面的工作:
&&(1)把ListView需要显示的数据传给Adapter
&&(2)把ListView显示Item的界面传给Adapter
&&(3)把上下文对象传给Adapter,主要用来得到LayoutInflater对象来得到Item界面
2.&给ListView设置当点击Item对象的时候执行的操作,此处要实现给Item中的各项也就是该程序的三个TextView设置监听器,也就是调用Adapter中的getView函数。
3.&getView函数实现的操作是:第一要将Item要显示的数据显示,然后设置监听器,为监听器设置操作。
代码如下:
ListView中Item的布局文件
activity_my_goods_listview.xml
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:orientation=&horizontal& &
android:id = &@+id/goodBarcode&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:paddingTop=&10dip&
android:clickable=&true&//设置可点击
android:id=&@+id/goodName&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:paddingTop=&10dip&
android:clickable=&true&
android:id=&@+id/goodProvider&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:paddingTop=&10dip&
android:clickable=&true&
&/LinearLayout&
ListView控件所在的布局文件
activity_my_goods.xml
&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:background=&#ffffffff&
android:gravity=&center&
android:orientation=&vertical&&
&LinearLayout
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:orientation=&horizontal&
android:paddingLeft=&15px&
android:layout_marginLeft=&5dip&
android:layout_marginTop=&93dip&&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:text=&商品条码&
android:paddingTop=&10dip&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:text=&商品名称&
android:paddingTop=&10dip&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:textColor=&#000&
android:textSize=&16sp&
android:text=&供应商&
android:paddingTop=&10dip&
&/LinearLayout&
&ScrollView
android:id=&@+id/feedbacklayout01&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:layout_marginTop=&103dip&
android:paddingTop=&20.0dip& &
&LinearLayout
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:orientation=&vertical&
android:paddingLeft=&20px&&
android:id=&@+id/goodsinfoListView&
android:layout_width=&wrap_content&
android:layout_height=&354dp&
android:layout_marginBottom=&5.0dip&
android:layout_marginRight=&5.0dip&
android:textColor=&#000&
android:textSize=&16.0dip&&
&/ListView&
&/ScrollView&
&/RelativeLayout&
重写Adapter类
MyGoodsAdapter.java
import java.util.L
import android.content.C
import android.view.LayoutI
import android.view.V
import android.view.View.OnClickL
import android.view.ViewG
import android.widget.BaseA
import android.widget.TextV
import android.widget.T
* 我的商品ListView的adapter。
public class MyGoodsAdapter extends BaseAdapter {
private List&Good&//ListView显示的数据
//显示列表项的Layout
private LayoutI//界面生成器
MyGoodsAdapter(List&Good& goods,int resource,Context context){
this.goods =
this.resource =
this.context =
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
public int getCount() {
return goods.size();
public Object getItem(int arg0) {
return goods.get(arg0);
public long getItemId(int arg0) {
return arg0;
public View getView(int arg0, View arg1, ViewGroup arg2) {
if(arg1 == null){
arg1 = inflater.inflate(resource, null);
final Good good = goods.get(arg0);
TextView goodBarcode =(TextView) arg1.findViewById(R.id.goodBarcode);
//设置ListView中的Item中的TextView
goodBarcode.setText(good.getGoodBarcode());
//为TextView设置监听器
goodBarcode.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
Toast.makeText(context, good.getGoodBarcode(), Toast.LENGTH_LONG).show();
TextView goodName =(TextView) arg1.findViewById(R.id.goodName);
goodName.setText(good.getGoodName());
goodName.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
Toast.makeText(context, good.getGoodName(), Toast.LENGTH_LONG).show();
TextView goodProvider =(TextView) arg1.findViewById(R.id.goodProvider);
goodProvider.setText(good.getGoodProvider());
goodProvider.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
Toast.makeText(context, good.getGoodProvider(), Toast.LENGTH_LONG).show();
return arg1;
Activity文件
MyGoodsActivity.java
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import android.os.B
import android.app.A
import android.content.I
import android.view.M
import android.view.V
import android.view.View.OnClickL
import android.widget.AdapterV
import android.widget.AdapterView.OnItemClickL
import android.widget.ListV
import android.widget.TextV
import android.widget.T
public class MyGoodsActivity extends Activity implements MeunOnClickListener{
private ListView goodsinfoListV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_goods);
// 获得ListView句柄
goodsinfoListView = (ListView)findViewById(R.id.goodsinfoListView);
final MyGoodsAdapter mgs = new MyGoodsAdapter(getListData(),R.layout.activity_my_goods_listview,this);
goodsinfoListView.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView&?& arg0, View arg1, int arg2,
long arg3) {
//int position =Integer.parseInt(arg1.getTag().toString());
mgs.getView(arg2, arg1, goodsinfoListView);
goodsinfoListView.setAdapter(mgs);
/*ListView数据*/
private List&Good& getListData() {
List&Good& list = new ArrayList&Good&();
Good good = new Good(&1111111&,&果冻&,&XXX区域代理商&);
list.add(good);
Good good1 = new Good(&2222222&,&营养快线&,&XXX区域代理商&);
list.add(good1);
Good good2 = new Good(&333333&,&豆干&,&XXX区域代理商&);
list.add(good2);
package net.aufo.apps.certclient.afterlogin.
public class Good {
private String goodB
private String goodN
private String goodP
public String getGoodBarcode() {
return goodB
public void setGoodBarcode(String goodBarcode) {
this.goodBarcode = goodB
public String getGoodName() {
return goodN
public void setGoodName(String goodName) {
this.goodName = goodN
public String getGoodProvider() {
return goodP
public void setGoodProvider(String goodProvider) {
this.goodProvider = goodP
public Good(String goodBarcode, String goodName, String goodProvider) {
this.goodBarcode = goodB
this.goodName = goodN
this.goodProvider = goodP
补充知识:
1.&getView函数介绍
public&abstract&
(int&position,&
&convertView,&
Get&a&View&that&displays&the&data&at&the&specified&position&in&the&data&set.&You&can&either&create&a&View&manually&or&inflate&it&from&an&XML&layout&file.&When&the&View&is&inflated,&the&parent&View&(GridView,&ListView...)&will&apply&default&layout&parameters&unless&you&use&
&to&specify&a&root&view&and&to&prevent&attachment&to&the&root.
Parameters
The&position&of&the&item&within&the&adapter's&data&set&of&the&item&whose&view&we&want.
convertView
The&old&view&to&reuse,&if&possible.&Note:&You&should&check&that&this&view&is&non-null&and&of&an&appropriate&type&before&using.&If&it&is&not&possible&to&convert&this&view&to&display&the&correct&data,&this&method&can&create&a&new&view.&Heterogeneous&lists&can&specify&their&number&of&view&types,&so&that&this&View&is&always&of&the&right&type&(see&
The&parent&that&this&view&will&eventually&be&attached&to
A&View&corresponding&to&the&data&at&the&specified&position.
position是指当前dataset的位置,通过getCount和getItem来使用。如果list向下滑动的话那么就是最低端的item的位置,如果是向上滑动的话那就是最上端的item的位置。conert是指可以重用的视图,即刚刚出队的视图。parent是list。
ListView中点击的Item
在onClick(View&v)方法里面用
int&position&=Integer.parseInt(v.getTag().toString())就可以得到你当前点击的是哪一个条目&
3.&Adapter内的onItemClick监听器四个arg参数
public&void&onItemClick&(AdapterView&?&&parent,&View&view,&int&position,&long&id&)
&&&parent&相当于listview&Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X&-&-。
&&&&view&是你点b&item的view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件
&&&position&是b在Y适配器里的位置(生成listview时,适配器一个一个的做item,然后把他们按顺序排好队,在放到listview里,意思就是这个b是第position号做好的)
&&&id&是b在listview&Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的,如果需要的话,你可以自己加个log把position和id都弄出来在logcat里瞅瞅,看了之后心里才踏实。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致ListView系列(八)——Item的click事件和Item里的button等子控件的click事件同时生效的解决办法
ListView的setOnItemClickListener事件和ListView中Item中包含的子控件(比如button)的click事件共存的解决办法:
在ListView的item的xml配置文件的根节点添加属性
android:descendantFocusability="blocksDescendants",
并且,在要添加事件的子控件(如button)的属性里添加android:focusable="false"
另外,注意:有时现成的几个adapter满足不了要求,此时就需要继承自BaseAdapter。
下面我是程序中的部分代码,该布局文件时listview中的item的布局,
listview_listitem_layout.xml
&&代码如下:
&RelativeLayout
&&xmlns:android="/apk/res/android"
&&android:layout_width="fill_parent"
&&android:layout_height="fill_parent"
&&android:orientation="horizontal"
&&android:descendantFocusability="blocksDescendants"
&&style="@style/ListItem"&
&&TextView&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
&ImageView&
&android:layout_width="45dip"
&android:layout_height="45dip"
&android:layout_gravity="center"
&android:layout_alignParentLeft="true"
&android:background="@drawable/imageview_background"&
&android:scaleType="fitXY"
android:layout_width="@dimen/btn_attention_width"
android:layout_height="@dimen/btn_attention_height"
android:layout_alignParentRight="true"
android:background="@drawable/button_selector_gradient"
android:text="关注"
android:focusable="false"/&
&/RelativeLayout&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 listview点击删除item 的文章

 

随机推荐