Android 单击按钮时获取列表视图项目位置
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20541821/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Get listview item position on button click
提问by coder
This is my listview click event:
这是我的列表视图点击事件:
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = lv1.getItemAtPosition(position);
ItemDetails obj_itemDetails = (ItemDetails)o;
Toast.makeText(ListViewImagesActivity.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
}
});
And this is my button click event:
这是我的按钮点击事件:
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//Here I need to get that position
});
Now I need to get the position of the clicked listview item..I have declared postion globally but that always gives me position 1.
现在我需要获取单击的列表视图项的位置。我已经在全局范围内声明了位置,但这总是给我位置 1。
Can anyone say me how do I get the positon ?
谁能告诉我如何获得职位?
回答by Pasquale Anatriello
do you execute this
你执行这个吗
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//Here I need to get that position
});
inside the getView method? if so it's very easy
在 getView 方法中?如果是这样,这很容易
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setTag(position);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
int position=(Integer)arg0.getTag();
});
回答by Karoly
I know I'm bit late with the answer, but what about this:
我知道我的答案有点晚了,但是这个呢:
private OnClickListener myButtonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
View parentRow = (View) v.getParent();
ListView listView = (ListView) parentRow.getParent();
final int position = listView.getPositionForView(parentRow);
}
};
in this case you don't need to set tags and so on.
在这种情况下,您不需要设置标签等。
回答by Lazy Ninja
If you are using ViewHolder make sure you use setTag() like this.
如果您使用的是 ViewHolder,请确保像这样使用 setTag()。
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.custom_row, parent, false);
holder.btnNxt = (Button) convertView.findViewById(R.id.btnNext);
holder.btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
int position=(Integer)arg0.getTag();
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.btnNxt.setTag(position); // <---- setTag() here
return convertView;
}
private class ViewHolder {
Button btnNxt;
}
}
If you setTag() before your setOnClickListener() line, you will have problem when you scroll your listview.
如果在 setOnClickListener() 行之前使用 setTag(),滚动列表视图时会出现问题。
回答by r4jiv007
declare a global variable and in onItemClick() method of lisview set the view position as variable's value. now use same variable in click method of button.
声明一个全局变量,并在 lisview 的 onItemClick() 方法中将视图位置设置为变量的值。现在在按钮的单击方法中使用相同的变量。
int global_position =0; // your global variable
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
global_position =position;
}
});
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(<context>,""+global_position,500).show();
});
回答by Ahamadullah Saikat
// use "top" to get listview items top position
// 使用“top”获取列表视图项的顶部位置
// Listview items top position
// Listview 项目顶部位置
int top;
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View lView, final int pos, long id) {
top = lView.getTop();
if (top < 1) top = 1;
}
});
// Or // Listview items top position Under CustomAdapter's getView method
// 或者 // Listview items top位置在CustomAdapter的getView方法下
int top;
final View finalConvertView = convertView;
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
top = finalConvertView.getTop();
if (top < 1) top = 1;
}
});