简体   繁体   中英

ListView selected item is not hold when scrolling

i using listview. i wrote custom adapter. i changed background color when listview item select. But i do not hold selected position when scrolling. Please help me

Thank you.

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

use like this in place of 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 

                        }
                    });

You have to call notifyDataSetChanged(); in you main class where you are handling list.setOnItemClickListener . add like this:

adapter.notifyDataSetChanged();

This happens because the view is recycled everytime it goes out of focus and new view is created so inorder to preserve the values you have to call this method.

Try This : And me Know if it works :)

You can keep track the position of the current selected element:

OnItemClickListener listViewOnItemClick = new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
      mSelectedItem = position;
      mAdapter.notifyDataSetChanged();
   }
};

And override the getView method of your adapter:

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

For set background color of selected row you can use your model class OrderItem. For this you just need a bool variable in your model class and whenever you click list item then just change value of bool variable and call notifydatachange function and set view color inside getView function of adapter. This will solve your problem.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM