Button
以下是我的每个单元格上的 a 的一些 XML ListView
:
android:onClick="buttonTouched"
这就是我的 ListActivity 上所说的:
public void buttonTouched(View v)
{
// how do I get the "position" of the cell this view is on?
}
如何获取position
被触摸的按钮的单元格?
Button
以下是我的每个单元格上的 a 的一些 XML ListView
:
android:onClick="buttonTouched"
这就是我的 ListActivity 上所说的:
public void buttonTouched(View v)
{
// how do I get the "position" of the cell this view is on?
}
如何获取position
被触摸的按钮的单元格?
在您的适配器中试试这个:
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View row = convertView;
YourWrapper wrapper = null;
if (row == null)
{
row = inflater.inflate(R.layout.layout, parent, false);
wrapper = new YourWrapper (row);
row.setTag(wrapper);
}
else
wrapper = (YourWrapper) row.getTag();
wrapper.getButton().setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// What you want
}
});
return row;
}
由于我在同一行上有许多按钮,因此我最终只是将适配器中的标签设置为所需的位置,然后在按钮触摸时获取标签:
public void imageClick(View v)
{
int position = (Integer) v.getTag();
}
我走这条路的原因是因为我需要在 ListActivity 中完成单击以访问我需要的一些不在适配器中的数据。
请看一下:OnItemClickListener。实现示例:自定义 ListView 上的 setOnItemClickListener。
由于您在列表视图的每一行中有 3 个按钮,并且您有 3 个不同的实现,因此还有另一种方法可以做到这一点。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(null == convertView){
holder = new ViewHolder();
convertView = inflater.inflate(LAYOUT_RESOURCE, null);
holder.btn1 = (Button) convertView.findViewById(R.id.btn1);
holder.btn2 = (Button) convertView.findViewById(R.id.btn2);
holder.btn3 = (Button) convertView.findViewById(R.id.btn3);
//setting tag to reduce hierarchy lookup
convertView.setTag(holder);
} else {
//getting tag to obtain the already found views
holder = (ViewHolder) convertView.getTag();
}
//Updating fields
holder.btn1.setOnClickListener(commonListener);
holder.btn2.setOnClickListener(commonListener);
holder.btn3.setOnClickListener(commonListener);
//returning the populated view
return convertView;
}
OnClickListener commonListener = new OnClickListener(){
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn1:
//do your work
break;
case R.id.btn2:
//do your work
break;
case R.id.btn3:
//do your work
break;
default:
break;
}
}
});
/**
* Holder class to improve performance. Helps in reducing the lookup for
* views.
*
*/
private static class ViewHolder {
Button btn1;
Button btn2;
Button btn3;
}
希望这可以帮助。