как выбрать все флажки в пользовательском списке из активности в Android

У меня есть собственный список, который содержит два текстовых представления и один флажок. Когда флажок установлен, идентификатор сохраняется в базе данных, а если флажок не установлен, идентификатор удаляется из базы данных. Но я хочу установить все флажки и сохранить все идентификаторы в базе данных или снять все флажки и удалить все идентификаторы из базы данных. Что именно я должен реализовать для этого. пожалуйста, помогите мне, это мой код адаптера

public class InviteListAdapter2 extends BaseAdapter implements OnClickListener {

private static final String TAG = "GroupEditMemberListAdapter";

private LayoutInflater inflater;
private ViewHolder holder;
private List<FriendItem> list;
private Context context;
private ImageLoader imageLoader;
MessageSendingActivity msg = new MessageSendingActivity();
private String groupId;
SqliteHandle sqhandle;
//private String adminId;
int total_contacts=0;
String f_id;
int flag=0;
String chetimeslot;
ArrayList<String> currentList = new ArrayList<String>();
public static final String DELETE_MEMBER = "2";
public static final String ADD_MEMBER = "1";

public InviteListAdapter2(Context context, List<FriendItem> list, String groupId, String adminId) {
    this.context = context;
    inflater = LayoutInflater.from(context);
    this.list = list;
    imageLoader = new ImageLoader(context);
    this.groupId = groupId;
    //this.adminId = adminId;
}   

public ArrayList<String> getChekedItem()
{
    if(currentList!=null)
    return this.currentList;
    else return null;
}
@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return list.get(position);
}

@Override
public long getItemId(int position) {
    return list.indexOf(getItem(position));
}

public void refresh(List<FriendItem> list) {
    this.list = list;
    notifyDataSetChanged();
}

public List<FriendItem> getList() {
    return list;
}

View hView;

ArrayList<CheckedItem> checkbox_timeslot = new ArrayList<CheckedItem>();
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    hView = convertView;

    final FriendItem item = list.get(position);

    if (convertView == null) {

        holder = new ViewHolder();

        hView = inflater.inflate(R.layout.friendlistitem, null);
        holder.nameTextView         = (TextView) hView.findViewById(R.id.friend_name_text);
        holder.statusTextView       = (TextView) hView.findViewById(R.id.friend_count_text);
        holder.userImageView        = (ImageView) hView.findViewById(R.id.friend_image);
        holder.checkBox             = (CheckBox) hView.findViewById(R.id.chekbox);

        hView.setTag(holder);
    }
    else {
        holder = (ViewHolder) hView.getTag();
    }

    try {
            holder.nameTextView.setText(""+item.getName() + " " +item.getLname());
            holder.statusTextView.setText(""+item.getContacts());

            String path = "http://www.gbggoa.org/testproject/four/images/pic.jpg";
            path = Constant.URL  + item.getImage();
            imageLoader.displayImage(path, holder.userImageView);

            if(item.getId().equals(Sessions.getUserId(context)))
            {
                holder.checkBox.setVisibility(View.GONE);
            }
            else
            {
                holder.checkBox.setVisibility(View.VISIBLE);
            }

            if(item.isChecked())
            {
                holder.checkBox.setChecked(true);

                if(item.getId().equals(Sessions.getUserId(context)))
                {
                    hView.setBackgroundResource(R.drawable.selector_list_gray);
                }
                else
                {
                    hView.setBackgroundResource(R.drawable.selector_list_green);
                }
            }
            else
            {
                holder.checkBox.setChecked(false);
                hView.setBackgroundResource(R.drawable.selector_list);
            }   

            holder.checkBox.setTag(position);
            holder.checkBox.setOnClickListener(this);

    } catch (Exception e) {
        e.printStackTrace();
    }

    return hView;
}   

class ViewHolder
{   
    TextView nameTextView, statusTextView;
    ImageView userImageView;
    CheckBox checkBox;
}

protected void showToast(String message) {
    Toast.makeText(context, ""+message, Toast.LENGTH_SHORT).show();
}

protected void showToastLong(String message) {
    Toast.makeText(context, ""+message, Toast.LENGTH_LONG).show();
}   

@Override
public void onClick(View view) {

    final int position = (Integer) view.getTag();
    String f_id=list.get(position).getId();
    final CheckBox checkBox = (CheckBox) view.findViewById(R.id.chekbox);
    sqhandle=new SqliteHandle(context); 
    final boolean isChecked = checkBox.isChecked();
    int total=sqhandle.getCheckedCount();                       
    checkBox.setVisibility(View.GONE);
    if(isChecked)
    {
        total_contacts = total_contacts + Integer.parseInt(list.get(position).getContacts());
        sqhandle.changeCheck("1", f_id);
        Toast.makeText(context, "Selected Contacts: "+total_contacts, Toast.LENGTH_LONG).show();

    }
    else
    {
        sqhandle.changeCheck("0", f_id);
        total_contacts = total_contacts - Integer.parseInt(list.get(position).getContacts());
        Toast.makeText(context, "Selected Contacts: "+total_contacts, Toast.LENGTH_LONG).show();
    }
    sqhandle.close();
    checkBox.setVisibility(View.VISIBLE);
    list.get(position).setChecked(isChecked);
    notifyDataSetChanged();

}


}   

person Namdev Londhe    schedule 16.09.2014    source источник


Ответы (3)


используйте ArrayList для хранения ваших идентификаторов предметов

ArrayList<Integer> tcontact = new ArrayList<Integer>();
 if(isChecked)
    {
         tcontact.add(Integer.parseInt(list.get(position).getContacts()))
        sqhandle.changeCheck("1", f_id);
        Toast.makeText(context, "Selected Contacts: "+total_contacts, Toast.LENGTH_LONG).show();

    }
    else
    {
      for(int i=0;i<tcontact.size;i++) {
      if(tcontact.get(i) == Integer.parseInt(list.get(position).getContacts())) {
      tcontact.remove(i);
      sqhandle.changeCheck("0", f_id);

        Toast.makeText(context, "Selected Contacts: "+total_contacts, Toast.LENGTH_LONG).show();
}
}}
person Nadir Belhaj    schedule 16.09.2014
comment
Мне нужно добавить еще один флажок, который будет проверять все остальные флажки в списке. и куда добавить этот флажок? В моем макете активности или макете адаптера? - person Namdev Londhe; 16.09.2014
comment
Это просто ArrayList, который представляет собой коллекцию для хранения выбранных вами элементов. - person Nadir Belhaj; 16.09.2014

Попробуйте следующее:

  1. Добавьте один флажок поверх списка в макете активности. Например, флажок с идентификатором chkall.

  2. Добавьте один логический флаг с именем checkedAll в класс вашего адаптера InviteListAdapter2 с помощью геттера и сеттера.

  3. Создайте для добавления/удаления из базы данных следующим образом:

    public void modifyFriends(List<FriendItem> fList, boolean checkedAll){
        String checkStatus = "0";   
        if(checkedAll){
            checkStatus = "1";
        }
        //sql code to change check status in database for all friends
    }
    
  4. Немного измените getView() код вашего адаптера следующим образом:

    if(item.isChecked() || checkedAll)
        {
            holder.checkBox.setChecked(true);
    
            if(item.getId().equals(Sessions.getUserId(context)))
            {
                hView.setBackgroundResource(R.drawable.selector_list_gray);
            }
            else
            {
                hView.setBackgroundResource(R.drawable.selector_list_green);
            }
        }
        else
        {
            holder.checkBox.setChecked(false);
            hView.setBackgroundResource(R.drawable.selector_list);
        }
    
  5. При установке флажка chkall выполните следующие действия:

        if(checked){
            inviteListAdapter2.setCheckedAll(true);
            modifyFriends(friendsList, true); //call a db helper method to change reflect check status in db
        }else{
            inviteListAdapter2.setCheckedAll(false);
            modifyFriends(friendsList, false); //call a db helper method to change reflect check status in db
        }
        inviteListAdapter2.notifyDatasetChaged();
    
person hemu    schedule 16.09.2014

нАмДев,

Я слышал, что вы говорите о добавлении флажка для обработки пользовательского события, означающего, что пользователь хочет установить флажки для всех элементов, когда установлен флажок «Отметить все», или снять флажки для всех элементов списка. когда флажок «Отметить все» снят или снят.

Итак, чтобы сделать это, да, вам нужно будет добавить флажок «Проверить все» или, возможно, пункт меню панели действий, чтобы дать пользователю возможность выполнить проверку всех элементов в списке.

В обработчике события щелчка для элемента управления «Проверить все» вы должны получить ссылку на список или использовать ArrayList, описанный Надиром Б, и использовать его для циклического просмотра и проверки каждого элемента.

Я не уверен, есть ли способ создать ссылку на список, а затем сделать что-то похожее на myList.SelectAll или myList.CheckAll.

Если нет, и вы хотите сделать что-то подобное, вы можете расширить ListView и создать свой собственный метод CheckAll или SelectAll, в котором вы затем просто получите коллекцию элементов списка и установите каждый из них как отмеченный.

person Bryan    schedule 16.09.2014