android listview, флажок меняется случайным образом

у меня есть список с флажком в каждой строке, когда я выбираю любой флажок, а затем прокручиваю экран, флажки для каждого элемента изменяются случайным образом, я имею в виду, что снятие флажка становится флажком, а иногда он остается снятым, а затем, когда я снова прокручиваю вверх, отмеченный становится неотмеченным, я нашел этот вопрос Android listview с проблемой флажка, и пользователи говорят, что это помогает им, но я не могу понять, что мне делать, и помогите, пожалуйста

это мой адаптер

class RestaurantAdapter extends BaseAdapter {
    private static LayoutInflater inflater = null;
    private ArrayList<HashMap<String, String>> data;
    Activity activity;

    public RestaurantAdapter(Activity activity,
            ArrayList<HashMap<String, String>> data) {
        // TODO Auto-generated constructor stub
        this.activity = activity;
        this.data = data;
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View vi = convertView;
        if (vi == null)
            vi = inflater.inflate(R.layout.restaurant_multi_select_list_item,
                    null);
        TextView name = (TextView) vi
                .findViewById(R.id.restaurant_multi_select_title);
        ImageView image = (ImageView) vi
                .findViewById(R.id.restaurant_multi_select_list_item_image);
        CheckBox cb = (CheckBox) vi
                .findViewById(R.id.restaurant_multi_select_checkBox);
        HashMap<String, String> restaurant = data.get(position);
        name.setText(restaurant.get("name"));

        image.setImageResource(Integer.parseInt(restaurant.get("image")));
        return vi;

    }
}

person user user    schedule 22.01.2013    source источник


Ответы (1)


Вам нужно явно установить состояние вашего флажка в getView() в зависимости от того, следует ли проверять его для этой конкретной строки или нет.

Представления, созданные для представления элементов ListView, обычно перерабатываются при прокрутке из соображений производительности (что вы и делаете в своем коде с помощью convertView), поэтому любые свойства представления, которые вы не переустанавливаете явно при повторном использовании этот View просто сохранит то состояние, в котором они были в последний раз, когда этот конкретный экземпляр View использовался.

person CloudyMusic    schedule 22.01.2013