0

Я создаю представление списка с флажком. Я столкнулся с проблемой в своем списке: когда я выбираю любой флажок, и когда я просматриваю свой список, этот флажок становится не выбранным.checkbox состояние без изменений после прокрутки оно станет таким же в Android

Ниже мой фрагмент кода:

public class HomeListAdapter extends ArrayAdapter<HashMap<String, Object> > { 


    boolean[] itemChecked; 
    // 
    private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); 



    private DisplayImageOptions options; 
    private CheckBox check; 

    public HomeListAdapter(Context context, ArrayList<HashMap<String, Object>> dataMap) { 

      super(context, 0, dataMap); 

      itemChecked = new boolean[dataMap.size()]; 

      options = new DisplayImageOptions.Builder() 
        .showImageOnLoading(R.drawable.com_facebook_profile_picture_blank_square) 
        .showImageForEmptyUri(R.drawable.com_facebook_profile_picture_blank_square) 
        .showImageOnFail(R.drawable.com_facebook_profile_picture_blank_square) 
        .cacheInMemory(true) 
        .cacheOnDisk(true) 
        .considerExifParams(true) 
        .displayer(new RoundedBitmapDisplayer(20)).build(); 
      this.notifyDataSetChanged(); 
     } 
     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      ViewHolder holder = null; 
      HashMap<String, Object> dataMap = getItem(position); 

      if (convertView == null) { 
       convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item1, parent, false); 
      } 


      TextView description = (TextView) convertView.findViewById(R.id.description); 
      description.setText(dataMap.get(Home1.TAG_CNAME).toString()); 
      TextView email = (TextView) convertView.findViewById(R.id.company); 
      email.setText(dataMap.get(Home1.TAG_EMAIL).toString()); 

      check= (CheckBox) convertView.findViewById(R.id.ck); 



      check.setTag(getPosition(dataMap)); 
      check.setChecked(true); 



      check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     int getPosition = (Integer) buttonView.getTag(); 


    } 
}); 

      if (dataMap.get(Home1.TAG_LIKE).toString().equals("true")) { 
       check.setChecked(true); 
      }else{ 
       check.setChecked(false); 
      } 


      ImageView logo = (ImageView) convertView.findViewById(R.id.logo); 
      ImageLoader.getInstance().displayImage(dataMap.get(Home1.TAG_IMAGE).toString(),logo, options, animateFirstListener); 
      return convertView; 
     } 

ответ

1

Вы должны установить состояние вашего зрения в методе getView(). Похоже, вы уже настройки массива для хранения отмеченных элементов, так что вам просто нужно заполнить его в onCheckedChanged() методы после линии int getPosition = (Integer) buttonView.getTag();, выполнив:

itemChecked[getPosition] = isChecked; 

Затем в методе getView(), а не делать:

if (dataMap.get(Home1.TAG_LIKE).toString().equals("true")) { 
    check.setChecked(true); 
}else{ 
    check.setChecked(false); 
} 

вам нужно использовать значение в массиве, чтобы установить проверенное состояние:

check.setChecked(itemChecked[position]); 

Если вам нужно лет ур код, чтобы установить начальное состояние проверяемых элементов на основе стоимости dataMap.get(Home1.TAG_LIKE), он должен, вероятно, пойти в конструкторе, сразу после инициализации itemChecked и должно быть что-то вроде:

for (int i =0; i < itemChecked.length; ++i) { 
    itemChecked[i] = dataMap.get(Home1.TAG_LIKE).toString().equals("true") 
} 
+0

не в состоянии понять, U, потому что я new on android ... plz может помочь мне на примере, я имею в виду, что вы можете сделать это в моем коде. –

+1

Я обновил свой ответ, чтобы четко указать, куда все должно идти. Хотя я мог бы просто опубликовать свой код с соответствующими обновлениями, я думаю, что это более полезно для всех, кто хочет научиться видеть, что нужно изменить, и тот факт, что вам нужно как хранить, проверяется ли элемент при изменении статуса, а затем установите, проверяется ли 'View' в методе' getView() '. Если вы все еще не понимаете, задайте конкретный вопрос о том, какой бит моего ответа вы не понимаете, и я попытаюсь уточнить. – HexAndBugs

+0

@TejashreeVerma: пожалуйста, не просите людей делать вашу работу за вас. Если вы застряли и нуждаетесь в индивидуальной поддержке, возможно, вам нужен фрилансер по вызову, который может помочь вам, когда вы застрянете? Конечно, вам нужно будет их оплатить! – halfer