Получение позиции строки просмотра списка при пролистывании - PullRequest
5 голосов
/ 05 декабря 2011

Я знаю, что этот тип вопроса задают раньше здесь .Я пробовал оба детектора жестов:

 wholelistview.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                if (gestureDetector.onTouchEvent(event)) {
                    return true;
                }
                return false;
            }
        });

, который обнаруживает только пролистывание (не может получить позицию строки здесь).

аналогично в getview:

public View getView(int position, View convertView, ViewGroup parent) {
//other stuff

convertview.setOnTouchListener(same as above);

} 

но не может обнаружить пролистывание.

Любое решение для этого ???Я хочу только положение строки, в которой выполняется удар.

Ответы [ 4 ]

3 голосов
/ 07 декабря 2011

Ханри, какие ошибки вы получаете? Я реализовал это, и он работает правильно. Но вместо того, чтобы сохранять положение элемента, я сохраняю держатель представления, который среди других также имеет свойство модели. Помните, что вы должны проверить, является ли convertview не нулевым. Посмотрите на код:

public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;

    Model m = filter.subItems.get(position);
    if(m != null)
    {
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.rowlayout, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.position = position; - here you can put your position.
            view.setOnTouchListener(this.listener);
            //assign whatever you like to the viewHolder - in most cases the model and inlated controls and then assign 
        } else {
            view = convertView;
        }
        view.setTag(viewHolder);
    }

, а затем

public boolean onTouch(View v, MotionEvent event) {
    ViewHolder viewHolder = ((ViewHolder) v.getTag());
}

хоп, который помогает. PS: Если вы ничего не знаете о держателях и тегах просмотра, я бы посоветовал увидеть там . И мой подход был описан в ссылке, которую дал Франкенштейн.

1 голос
/ 05 декабря 2011

Чтобы получить позицию строки для вашего просмотра, получите позицию просмотра, переданную onTouch для вашего списка просмотра этой функцией

wholelistview.setOnTouchListener(new View.OnTouchListener() {         
 public boolean onTouch(View v, MotionEvent event) {                 
 if (gestureDetector.onTouchEvent(event)) {
    int position =  indexOfChild(View v);

     return true;                 
     }                 
     return false;             
                  }         }); 

Возвращает индекс ребенка. http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.5_r1/android/view/ViewGroup.java#ViewGroup.indexOfChild%28android.view.View%29

1 голос
/ 06 декабря 2011

вы можете использовать getTag и setTag, чтобы узнать тег представления, и, используя его, вы можете решить, какая строка была прокручена

public View getView(int position, View convertView, ViewGroup parent) { 
//other stuff 
     convertview.setTag(position);
}  

и для смахивание по ссылке

 public boolean onTouch(View v, MotionEvent event) {
     int pos = (Integer)v.getTag();
     Log.i(TAG,pos+" is swiped");
 }

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

0 голосов
/ 05 декабря 2011
private int position = -1;
@Override
protected void onListItemClick(ListView l, View v, int index, long id) {
position = index;
}

как это?

...