Сбросить строку в списке Android

В ListView, когда я выбираю строку, она устанавливает цвет фона с сбросом предыдущего выбранного. но когда список прокручивается вниз, он показывает, что выбрана другая строка с тем же фоном, что означает, что выбрана строка, прокручиваемая на одну страницу вниз.

Пожалуйста, помогите мне

В этих двух изображениях я выбрал только первую строку, но когда я прокручиваю страницу 23, она уже выбрана. Как установить выбранную строку с прокручиваемой страницей?

ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    lv.setBackgroundResource(R.drawable.shape);

    // on seleting single voter
    // launching Edit Product Screen       

    lv.setOnItemClickListener(new OnItemClickListener() {

        //mOnDoubleTapListener = listener;

        @Override
        public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

            boolean netFlag = new validationClass().haveNetworkConnection(context);

            if(!netFlag) {
                Toast.makeText(getApplicationContext(), "Data Connection is not available.", Toast.LENGTH_LONG).show();
                return;
            }

            if (currentSelectedView != null && currentSelectedView != view) {
                TextView textViewName = (TextView) currentSelectedView.findViewById(R.id.name);
                TextView textViewPart = (TextView) currentSelectedView.findViewById(R.id.partno);
                textViewName.setTextColor(getResources().getColor(android.R.color.darker_gray));
                textViewPart.setTextColor(getResources().getColor(android.R.color.darker_gray));
            } currentSelectedView =view
                TextView textViewName = (TextView) view.findViewById(R.id.name);
                TextView textViewPart = (TextView) view.findViewById(R.id.partno);
                                textViewName.setTextColor(getResources().getColor(R.color.text_color));
                textViewPart.setTextColor(getResources().getColor(R.color.text_color));
            }

}

введите здесь описание изображения

введите здесь описание изображения


person Nitin Karale    schedule 17.10.2013    source источник
comment
Привет, трудно следовать вашему описанию без примеров кода. Пожалуйста, опубликуйте фрагменты кода, где у вас возникли проблемы.   -  person Otra    schedule 17.10.2013
comment
это потому, что ListView перерабатывает представления. когда вы прокручиваете свой список, строки, которые выходят за пределы экрана, кэшируются, а затем появляются снизу, когда вы прокручиваете новые строки. попробуйте это для понимания: piwai.info/android-adapter-good- практики/#getView-переработка   -  person Vasily Sochinsky    schedule 18.10.2013


Ответы (1)


Есть два совета, чтобы решить эту проблему:

  1. Нажатие/щелчок по элементу просто устанавливает этот элемент как выбранный, и пользователю нужно нажать кнопку, чтобы воздействовать на элемент.

  2. Поскольку ваш список является полноэкранным, попросите onClick() записать позицию выбранного элемента. При последующем щелчке сравнивайте текущую позицию с последней. Если они не совпадают, просто запишите новую позицию. Если они совпадают, продолжайте операцию. Или вы можете потребовать от пользователя сделать длинный щелчок (onItemLongClick()), чтобы воздействовать на выбор, если текущая позиция такая же, как и последняя.

Любой способ может помочь вашему приложению избежать обнаружения щелчка, когда пользователь действительно пытается прокрутить. Android не будет вызывать onClick(), если пользователь сразу начнет прокручивать. Вы не можете контролировать это.

person Rick Falck    schedule 17.10.2013