怎么监听listview里的item上的按钮?
问题描述:
Android listview的item里面有个按钮,item是另外一个XML文件,怎么给这个按钮注册监听事件?
答
在适配器(Adapter)的getView函数中通过findViewById(id)函数找到你需要绑定事件的按钮,然后通过setOnClickListener绑定,例如:
//在调用findViewById之前必须通过inflate布局文件得到convertView
//或者getView函数传递过来的convertView不为空
Button btn=convertView.findViewById( btn id ); // btn id 填入XML布局文件中的Button定义的ID
btn.setOnClickListener(new View.OnClickListener(){
@Override
void onClick(View v){
//这里写你的按钮点击之后要做的事
}
});
答
可以用intent将xml文件传入按钮监听事件当中,形式如下
listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,int position,long id){
Intent intent = new Intent(this,yourActivity.class);
startActivity(intent);
}
});
然后在yourActivity.java(yourActivity.java是你的item对应的.java文件)的onCreate中
public class yourActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.yourXML);
Intent intent = getIntent();
}
}
答
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 你要进行的操作
}
});
答
public class MainActivity extends Activity implements OnItemClickListener{
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
// 找到控件
ListView lv_news = (ListView)findViewById(R.id.lv_news);
// 获取新闻的内容,也就是list封装
ArrayList<NewsBean> allNews = NewsUtils.getAllNews(mContext);
// 创建一个adapter设置给listview
NewsAdapter newsAdapter = new NewsAdapter(mContext, allNews);
lv_news.setAdapter(newsAdapter);
// 设置listview条目的点击事件
lv_news.setOnItemClickListener(this);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//需要获取条目上bean对象中url做跳转
NewsBean bean = (NewsBean) parent.getItemAtPosition(position);
String url = bean.newsurl;
//跳转浏览器
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
}
}
答
楼上回答正解,但要注意的是,在item中设置button 或者imagebutton,会存在抢取焦点的现象,需要在Item Layout 的根布局中加上 android:descendantFocusability = "blocksDescendants" 属性即可