怎么监听listview里的item上的按钮?

怎么监听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" 属性即可