Получить позицию позиции списка при нажатии кнопки
Это мое событие clickview:
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();
}
});
И это мое событие нажатия кнопки:
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//Here I need to get that position
});
Теперь мне нужно получить позицию элемента clicked listview. Я объявлял позицию глобально, но всегда давал мне позицию 1.
Может ли кто-нибудь сказать мне, как мне получить позит?
Ответы
Ответ 1
выполняете ли вы это
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//Here I need to get that position
});
внутри метода 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();
});
Ответ 2
Я знаю, что я немного опоздал с ответом, но как насчет этого:
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);
}
};
в этом случае вам не нужно устанавливать теги и т.д.
Ответ 3
Если вы используете 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;
}
}
Если вы установилиTag() перед вашей строкой setOnClickListener(), у вас возникнет проблема при прокрутке списка.
Ответ 4
объявить глобальную переменную, а в методе onItemClick() для lisview установить позицию представления как значение переменной.
теперь используйте одну и ту же переменную в методе нажатия кнопки.
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();
});
Ответ 5
//используйте "верх" для получения верхней позиции списка элементов
//Верхняя позиция списка 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;
}
});
//Или
// Верхняя позиция списка Listview В методе getView для CustomAdapter
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;
}
});