Android ListView与选定项目滚动

问题描述 投票:2回答:3

我有在此SO帖子中提到的问题:Selected list item color moves on scrolling the listView in Android,但我不知道如何解决此问题。

这是它的外观:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9vdE11My5wbmcifQ==” alt =“在此处输入图像描述”>

项目的高亮显示将移至另一个未被选中的项目上(滚动时)。有时,高光在2个项目之间(一半和一半)。.

此错误也发生在默认适配器(未设置适配器)上。

这是我的适配器:

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Color;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class SimpleCheckAdapter extends ArrayAdapter<String> {

    private SparseBooleanArray mSparseBooleanArray;
    private LayoutInflater mInflater;
    private ArrayList<String> itemsArrayList;

    public SimpleCheckAdapter(Context context, ArrayList<String> a) {
        super(context,R.layout.srow,a);
        this.itemsArrayList = a;
        this.mInflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

      if(convertView == null){
          convertView = this.mInflater.inflate( R.layout.srow, parent, false);
      }

      // 3. Get the two text view from the rowView
        TextView txt = (TextView) convertView.findViewById(R.id.simpleText);

        // 4. Set the text for textView 
        txt.setText(itemsArrayList.get(position));


       // 5. return rowView
        return convertView;
    }
}

谁可以帮助并知道如何解决此丑陋行为?

android listview scroll graphic
3个回答
0
投票

创建onscrollistener并删除滚动列表的选择。


0
投票

我在大多数项目中都使用了这种方法,但从未发现任何问题。我什至制作了一个涉及联系人的应用程序,可以管理大量数据(鉴于联系人API可以正常工作),并且运行顺利,因此我的回答是。


0
投票

这是一个对我有用的简单解决方案:

  1. 扩展您的SimpleCheckAdapter的代码:

    private int selectedPosition = -1;
    void setSelectedPosition( int pos ) {
        selectedPosition = pos;
        notifyDataSetChanged();
    }
    
  2. 扩展GetView()中的代码:

    convertView.setBackgroundColor(Color.WHITE);
    if ( position == selectedPosition) {
        convertView.setBackgroundColor(Color.LTGRAY);
    }
    
  3. 在您的活动中,为ListView注册ClickCallback()

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) {
            adapter.setSelectedPosition(position);
        }
    });
    

清除选择呼叫:

    adapter.setSelectedPosition(-1);

仅此而已,就不需要以编程方式设置setChoiceMode()和setSelector()或xml中的android:choiceMode和android:listSelector!

© www.soinside.com 2019 - 2024. All rights reserved.