滚动时,ListView所选项目未保留

时间:2015-04-02 13:02:22

标签: android listview position selected

我使用listview。我写了自定义适配器。我在listview项目选择时更改了背景颜色。但滚动时我没有按住选定的位置。请帮帮我

谢谢。

    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;
    }
}

4 个答案:

答案 0 :(得分:0)

像这样使用onclick listener

 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 

                        }
                    });

答案 1 :(得分:0)

您必须在处理notifyDataSetChanged();的主要课程中致电list.setOnItemClickListener。像这样添加:

adapter.notifyDataSetChanged();

这是因为视图每次失焦时都会被回收,并且会创建新视图,以便保留您调用此方法所需的值。

答案 2 :(得分:0)

试试这个:我知道它是否有效:)

您可以跟踪当前所选元素的位置:

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;
}

答案 3 :(得分:-1)

对于所选行的设置背景颜色,您可以使用模型类OrderItem。为此,您只需要在模型类中使用bool变量,并且每当您单击列表项时,只需更改bool变量的值并调用notifydatachange函数并在适配器的getView函数内设置视图颜色。 这将解决您的问题。