滚动时 ListView 所选项目未保持
ListView selected item is not hold when scrolling
我正在使用列表视图。我写了自定义适配器。我在列表视图项目 select 时更改了背景颜色。但是我在滚动时没有保持 selected 位置。请帮助我
谢谢。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.setBackgroundColor(color);
}
});
class OrderSummaryAdapter extends AppBaseAdapter{
private ViewHolder holder;
public OrderSummaryAdapter(Context context, List<OrderItem> item) {
super(context, item);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.example_layout, parent, false);
holder.text = (TextView) convertView.findViewById(R.id.eat_name);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText("text");
return convertView;
}
class ViewHolder{
TextView text;
}
}
像这样代替 onclick 侦听器
final int selectedposition=0;
mListView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(
AdapterView<?> parent, View view,int position, long id)
{
selectedposition=position;
}
@Override
public void onNothingSelected(
AdapterView<?> parent) {
// TODO Auto-generated method
}
});
您必须在处理 list.setOnItemClickListener
的主 class 中调用 notifyDataSetChanged();
。像这样添加:
adapter.notifyDataSetChanged();
发生这种情况是因为视图在每次失去焦点并创建新视图时都会被回收,因此为了保留您必须调用此方法的值。
要设置所选行的背景颜色,您可以使用您的模型 class OrderItem。为此,您只需要在模型中使用一个 bool 变量 class,每当您单击列表项时,只需更改 bool 变量的值并调用 notifydatachange 函数并在适配器的 getView 函数中设置视图颜色。
这将解决您的问题。
试试这个:我知道它是否有效:)
您可以跟踪当前所选元素的位置:
OnItemClickListener listViewOnItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
mSelectedItem = position;
mAdapter.notifyDataSetChanged();
}
};
并覆盖适配器的 getView 方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = View.inflate(context, R.layout.item_list, null);
if (position == mSelectedItem) {
// set your color
}
return view;
}
我正在使用列表视图。我写了自定义适配器。我在列表视图项目 select 时更改了背景颜色。但是我在滚动时没有保持 selected 位置。请帮助我
谢谢。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.setBackgroundColor(color);
}
});
class OrderSummaryAdapter extends AppBaseAdapter{
private ViewHolder holder;
public OrderSummaryAdapter(Context context, List<OrderItem> item) {
super(context, item);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.example_layout, parent, false);
holder.text = (TextView) convertView.findViewById(R.id.eat_name);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText("text");
return convertView;
}
class ViewHolder{
TextView text;
}
}
像这样代替 onclick 侦听器
final int selectedposition=0;
mListView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(
AdapterView<?> parent, View view,int position, long id)
{
selectedposition=position;
}
@Override
public void onNothingSelected(
AdapterView<?> parent) {
// TODO Auto-generated method
}
});
您必须在处理 list.setOnItemClickListener
的主 class 中调用 notifyDataSetChanged();
。像这样添加:
adapter.notifyDataSetChanged();
发生这种情况是因为视图在每次失去焦点并创建新视图时都会被回收,因此为了保留您必须调用此方法的值。
要设置所选行的背景颜色,您可以使用您的模型 class OrderItem。为此,您只需要在模型中使用一个 bool 变量 class,每当您单击列表项时,只需更改 bool 变量的值并调用 notifydatachange 函数并在适配器的 getView 函数中设置视图颜色。 这将解决您的问题。
试试这个:我知道它是否有效:)
您可以跟踪当前所选元素的位置:
OnItemClickListener listViewOnItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
mSelectedItem = position;
mAdapter.notifyDataSetChanged();
}
};
并覆盖适配器的 getView 方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = View.inflate(context, R.layout.item_list, null);
if (position == mSelectedItem) {
// set your color
}
return view;
}