29

Это мой ListView нажмите событие:Получить ListView положения элемента на кнопке мыши

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 
}); 

Теперь мне нужно, чтобы получить позицию щелкнула ListView пункт..Я объявил позицию глобально, но это всегда дает мне позицию 1.

Может ли кто-нибудь сказать мне, как мне получить позит?

+0

Где вы заявили о позиции по всему миру? – CodingIntrigue

+0

@ RGraham-Before метод onCreate – coder

+0

Вы объявили position = 1 глобально, как это? – Piyush

ответ

65

вы выполнить этот

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(); 
    }); 
+0

Здравствуйте, сэр, Пожалуйста, скажите мне, как я могу получить позицию определенного элемента, не нажимая на этот элемент только базу имени элемента. –

+0

@NikhilSingh вы должны открыть вопрос самостоятельно или использовать функцию поиска. Во всяком случае, метод 'public View getView (int position, View convertView, родительская группа ViewGroup)' класса Adapter уже содержит параметр, указывающий позицию позиции. – ocramot

0

объявить глобальную переменную, а в методе 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(); 
}); 
+0

будет тост только в последний раз щелкнул позицию позиции !! – r4jiv007

+0

Вы пробовали? это работает? Я хочу использовать этот подход, потому что я не хочу помещать позицию в тег вида. – Dagon

+0

Может ли любой орган рассказать, как я могу найти позицию определенного элемента, не нажимая на этот элемент, на основе имени элемента. –

6

Если вы используете 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; 
     } 
    } 

Если вы SetTag() перед вашим setOnClickListener() линии, вы будете иметь проблемы при прокручивании ListView.

+0

Только решение, которое сработало !!!! Огромное спасибо.Вы сохранили мою жизнь –

24

Я знаю, что я немного опоздал с ответом, но что об этом:

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); 
    } 
}; 

в этом случае вам не нужно устанавливать теги и так далее.

+0

hii, Я хочу знать положение конкретного элемента в виде списка, не нажимая на этот элемент на основе элемента. –

+1

OMG, вы спасатель жизни. Завтра у меня есть крайний срок для моего приложения на работе, и только сегодня я понял, что не получил правильной позиции и провел целый день. Спасибо) – Sermilion

+0

Добро пожаловать, мой друг! :) – Karoly

0

// использование "лучшее", чтобы получить элементы ListView верхнего расположения предметов

// 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; 

     } 
    });