我有这个SO帖子中提到的问题:Selected list item color moves on scrolling the listView in Android,但我不明白如何解决这个问题。
这就是它的样子:
项目的突出显示移动到另一个未选中的项目(滚动时)。 有时亮点是两个项目(一半和一半)..
默认适配器(没有适配器设置)也会发生此错误。
这是我的适配器:
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;
}
}
谁可以帮助并知道如何解决这种丑陋的行为?
答案 0 :(得分:0)
创建onscrollistener并删除滚动列表的选择。
答案 1 :(得分:0)
我在大多数项目中使用这种方法,我从未发现任何问题。我甚至创建了一个涉及联系人的应用程序,它管理着大量的数据(给定的联系方式API工作)并且它运行顺畅,所以我的回答是肯定的。
答案 2 :(得分:0)
这是一个对我有用的简单解决方案:
扩展您的SimpleCheckAdapter的代码:
private int selectedPosition = -1;
void setSelectedPosition( int pos ) {
selectedPosition = pos;
notifyDataSetChanged();
}
在GetView()中扩展代码:
convertView.setBackgroundColor(Color.WHITE);
if ( position == selectedPosition) {
convertView.setBackgroundColor(Color.LTGRAY);
}
在您的活动中为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!