我有一个自定义ListView
,其中包含Button
。此按钮的功能是删除按钮。每当用户单击此按钮时,将删除当前行。
onClickListener
? 提前致谢。
答案 0 :(得分:7)
在自定义适配器类getView()
buttonDelete.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// Use position parameter of your getView() in this method it will current position of Clicked row button
// code for current Row deleted...
}
});
答案 1 :(得分:4)
首先,您可以轻松处理此项目的点击。
您只需添加一个侦听器:myButton.setOnClickListener(mBuyButtonClickListener)
。此操作通常在getView(...)
的{{1}}实施中完成。
您的听众可以使用ListView
了解按钮的项目位置。
看看这个听众样本:
myListView.getPositionForView(myButton)
完成此操作后,您应该遇到问题,无法处理项目本身的点击以及其他一些触摸事件传播。
因此,您应该阅读this article,其中详细描述了private OnClickListener mBuyButtonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
final int position = getListView().getPositionForView(v);
if (position != ListView.INVALID_POSITION) {
//DO THE STUFF YOU WANT TO DO WITH THE position
}
}
};
内多个可触摸区域的使用。这将非常有帮助。
答案 2 :(得分:1)
在适配器类的getView方法中使用它。
holder.button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
}
});
答案 3 :(得分:1)
我到处寻找,没有答案帮助我,直到有人做到了。
我所做的是创建一个HolderView并将我的所有textview和其他小部件包装在adpater的getView方法中:
把这个课程放在:
static class ViewHolder
{
TextView text1;
TextView text2;
TextView text3;
}
我现在也正常地解决了相同的问题,因为他们现在分开了:
TextView text1;
TextView text2;
TextView text3;
然后在getView中夸大布局后声明所有视图和小部件:
holder = new ViewHolder();
holder.text1 = (TextView) vi.findViewById(R.id.textView2single);
holder.text2 = (TextView) vi.findViewById(R.id.textView3single);
holder.text3 = (TextView) vi.findViewById(R.id.textView4single);
在onClick方法中,我用过:
View parentView = (View) v.getParent();
然后使用此父视图再次声明我的所有小部件:
text1 = (TextView) parentView.findViewById(R.id.textView2single);
text2 = (TextView) parentView.findViewById(R.id.textView3single);
text3 = (TextView) parentView.findViewById(R.id.textView4single);
在执行此操作时,我强制我的onClick获取列表视图项的父位置,因此可以轻松调用该父级中的所有小部件,然后您可以使用它执行您喜欢的操作。这是我发现有效的唯一方法。
答案 4 :(得分:0)
创建自定义列表视图适配器,扩展BaseAdapter并实现OnClickListener
public class ListAdapter extends BaseAdapter implements OnClickListener {}
覆盖getView方法
@Override
public View getView(int
position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item, parent, false);
holder = new ViewHolder();
holder.b1= (Button) row.findViewById(R.id.b1);
b1.setOnClickListener(this);
else {
holder = (ViewHolder) row.getTag();
}
}
现在覆盖onclick方法
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.b1:
//button b1 click event
break;
}
}
public class ViewHolder {
Button b1;
}
答案 5 :(得分:0)
创建一个新的View类型变量并使用currenView分配它(检查iit是否为null)。定义变量(此处采用ImageButton)并以下面提到的方式设置viewId。
public View getView(int position, View convertView, ViewGroup parent) {
View itemview=convertView;
if (itemview==null)
{
itemview=getLayoutInflater().inflate(R.layout.group_list,parent,false);
}
final group_contacts currentcontact=g_contact.get(position);
ImageButton delete=(ImageButton) itemview.findViewById(R.id.imgbtn_delete);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Add your code here to run on tapping button
}
});
return itemview;
}
答案 6 :(得分:0)
要在onClickListener()
的{{1}}上使用Button
方法,您必须ListView
onClickListener()
{{}上的按钮Adapter
1}} Methode。
但问题是,您将无法从getView
的{{1}}参数中获取值。
要获取已触摸的按钮的position
,您必须在getView
上调用position
方法。
让我们讨论一个更好理解的例子,
假设您有一个名为getPositionForView()
ListView
其上的ListView
名为ExampleListview
,您想在其上使用Button
。
ExampleButton