当使用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;
}
}
结果 :当我点击按钮时弹出对话框: