android listview中按钮事件监听问题

当使用listview.setAdapter();中设置每一项的view时可能会遇到 如果存在按钮需要获取焦点,那按钮的onclick事件可能与listview的itemclick事件起冲突,无法获取按钮的click事件。


我的解决方法是 自己写一个adapter这个adapter 继承BaseAdapter  在方法getview()中设置按钮的事件即可监听的到。

如下:

public class MySongListAdapter extends BaseAdapter
{
private Context ct;
private List<Map<String, Object>> items=null;
    public MySongListAdapter(Context ct)
    {
    this.ct=ct;
    initData();
    }
private void initData() 
{
items=new ArrayList<Map<String,Object>>();
    for(int i=0;i<20;i++)
    {
    Map<String,Object> map=new HashMap<String, Object>();
    map.put("ck_iv", R.drawable.ic_checkbox_unselected);
    map.put("songname_tv", "王力宏");
    map.put("songMess_tv", "我们的歌");
    items.add(map);
    }
}
@Override
public int getCount() 
{
// TODO Auto-generated method stub
return items.size();
}


@Override
public Object getItem(int position) 
{
// TODO Auto-generated method stub
return null;
}


@Override
public long getItemId(int position) 
{
// TODO Auto-generated method stub
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
LayoutInflater inflater=LayoutInflater.from(ct);
View view=inflater.inflate(R.layout.song_list_item, null);
TextView songNameTV=(TextView)view.findViewById(R.id.nine_song_name_tv);
songNameTV.setText(items.get(position).get("songname_tv").toString());
TextView songMessTV=(TextView)view.findViewById(R.id.nine_song_mess_tv);
songMessTV.setText((items.get(position).get("songMess_tv").toString()));
Button btn=(Button)view.findViewById(R.id.nine_expend_btn); 
btn.setOnClickListener(new OnClickListener()      
   //设置按钮的click事件
{
@Override
public void onClick(View arg0) 
{
//Toast.makeText(ct, "click", Toast.LENGTH_LONG).show();
View view=LayoutInflater.from(ct).inflate(R.layout.music_expend_dialog, null);
final Dialog dialog=new Dialog(ct,R.style.dialog_bg_style);
Window window=dialog.getWindow();
                window.setGravity(Gravity.BOTTOM);
dialog.setContentView(view);
dialog.show();
//-----歌曲拓展对话框中按钮的监听
Button nagetiveBtn=(Button)view.findViewById(R.id.music_expend_dialog_positive_bt);
nagetiveBtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) 
{
dialog.cancel();
}
});

Button music_expend_add_btn=(Button)view.findViewById(R.id.music_expend_add_btn);
Button music_expend_ring_btn=(Button)view.findViewById(R.id.music_expend_ring_btn);
Button music_expend_delete_btn=(Button)view.findViewById(R.id.music_expend_delete_btn);
Button music_expend_like_btn=(Button)view.findViewById(R.id.music_expend_like_btn);
music_expend_add_btn.setOnClickListener(new OnClickListener() 
{

@Override
public void onClick(View arg0)
{
dialog.cancel();
// TODO Auto-generated method stub
Toast.makeText(ct, "添加到播放列表", Toast.LENGTH_LONG).show();

}
});
music_expend_ring_btn.setOnClickListener(new OnClickListener() 
{

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog.cancel();
Toast.makeText(ct, "设置为铃声", Toast.LENGTH_LONG).show();
}
});
music_expend_delete_btn.setOnClickListener(new OnClickListener() 
{

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog.cancel();
Toast.makeText(ct, "删除选中歌曲", Toast.LENGTH_LONG).show();
}
});
music_expend_like_btn.setOnClickListener(new OnClickListener() 
{

@Override
public void onClick(View arg0) 
{
// TODO Auto-generated method stub
dialog.cancel();
Toast.makeText(ct, "添加到喜欢列表", Toast.LENGTH_LONG).show();
}
});
}
});
return view;
}
}


结果 :当我点击按钮时弹出对话框:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值