【问题标题】:Android ListView scrolling with selected itemAndroid ListView 滚动选定的项目
【发布时间】:2014-08-07 19:51:17
【问题描述】:

我有这个 SO 帖子中提到的问题:Selected list item color moves on scrolling the listView in Android,但我不明白如何解决这个问题。

这就是它的样子:

一个项目的突出显示移动到另一个未选择的项目上(滚动时)。 有时亮点在 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;
    }
}

谁能帮助并知道如何解决这种丑陋的行为?

【问题讨论】:

  • Jan:谢谢大家:有什么想法吗?

标签: android listview scroll graphic


【解决方案1】:

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

【讨论】:

  • 但我想保留选择,如果我再次向上滚动,这可能吗?谢谢!
  • 是的,在这种情况下,您需要记住选择,并且有不同的方法可以提供第一个和最后一个显示的项目索引。使用它,您将知道用户是否再次向上滚动,您可以添加选择。
  • 我如何检查一个项目是否正确? singleCheckView.setItemChecked(1, true);似乎对我不起作用(在 OnScrollListener 的 MainActivity 中,singleCheckView 是 ListView)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这是一个适合我的简单解决方案:

    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. 在你的Activity中为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!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多