代码之家  ›  专栏  ›  技术社区  ›  CHarris

当我的recyclerview中的所有复选框都未选中时,如何显示toast?

  •  1
  • CHarris  · 技术社区  · 7 年前

    我能做的最接近的就是展示 toast 每次之后 checkbox 未选中,但我想显示 干杯 只有在他们 全部的 已取消选中。在我的 onBindViewHolder 我有:

        ((MatchingContact) viewHolder).check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            // ((MatchingContact) viewHolder).check.setOnClickListener(new CompoundButton.OnClickListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    
                if (isChecked==false) {
                    Toast.makeText(context_type, "all unchecked!", Toast.LENGTH_SHORT).show();
    
    
                }
    
            }
        });
    

    这是我的活动,NewContact。java,代码(在下面的注释中请求后):

        public class NewContact extends AppCompatActivity  {
    
            //in this JSONArray, checkedContacts, we will be storing each checkedContact JSON Object
            //Then we're going to post it to our NewContact.php file
            JSONArray checkedContacts = new JSONArray();
    
            Button phoneContacts;
            CheckBox mcheckbox;
    
            //thse are the fields in the xml
            private EditText categoryname;
            private EditText namename;
            private EditText phonename;
            private EditText addressname;
            private EditText commentname;
    
            int public_or_private;
    
            // ArrayList called selectPhoneContacts that will contain SelectPhoneContact info
            ArrayList<SelectPhoneContact> selectPhoneContacts;
    
            ArrayList<String> allPhonesofContacts;
            ArrayList<String> allNamesofContacts;
            ArrayList<String> MatchingContactsAsArrayList;
            String phoneNoofUserCheck;
            public String phoneNumberofContact;
            String phoneNameofContact;
    
            //For the recycler view, containing the phone contacts
            RecyclerView recyclerView;
            PopulistoContactsAdapter adapter;
    
            int check_counter = 0;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_new_contact);
    
                PopulistoContactsAdapter adapter = new PopulistoContactsAdapter(selectPhoneContacts, NewContact.this);
    
                Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
                setSupportActionBar(toolbar);
    
                //we are fetching details for the recyclerview - the name, numbers, matching contacts...
                LoadContact loadContact = new LoadContact();
                loadContact.execute();
    
                //selectPhoneContacts is an empty array list that will hold our SelectPhoneContact info
                selectPhoneContacts = new ArrayList<SelectPhoneContact>();
    
                recyclerView = (RecyclerView) findViewById(R.id.rv);
    
                //cast an EditText for each of the field ids in activity_new_contactact.xml
                categoryname = (EditText) findViewById(R.id.textViewCategory);
                namename = (EditText) findViewById(R.id.textViewName);
                phonename = (EditText) findViewById(R.id.textViewPhone);
                addressname = (EditText) findViewById(R.id.textViewAddress);
                commentname = (EditText) findViewById(R.id.textViewComment);
    
                phoneContacts = (Button) findViewById(R.id.btnPhoneContacts);
    
                phoneContactsButton();
                checkboxnull();
    
                public_or_private = 1;
    
            }
    
            // Load data in background
            class LoadContact extends AsyncTask<Void, Void, Void> {
                @Override
                protected void onPreExecute() {
    
                    super.onPreExecute();
                }
    
    
                @Override
                protected Void doInBackground(Void... voids) {
    
                    //code here to get allPhonesofContacts
                    allPhonesofContacts = gson.fromJson(json, type);
    
                    //code here to get allNamesofContacts
                    allNamesofContacts = gson.fromJson(jsonNames, type);
                    System.out.println("NewContact: allNamesofContacts :" + allNamesofContacts);
    
                    //code here to get MatchingContactsAsArrayList 
                    MatchingContactsAsArrayList = gsonMatchingContactsAsArrayList.fromJson(jsonMatchingContactsAsArrayList, type1);
                    System.out.println("SelectPhoneContactAdapter MatchingContactsAsArrayList :" + MatchingContactsAsArrayList);
    
                    //for every value in the allPhonesofContacts array list, call it phoneNumberofContact
                    for (int i = 0; i < allPhonesofContacts.size(); i++) {
    
                        phoneNumberofContact = allPhonesofContacts.get(i);
                        phoneNameofContact = allNamesofContacts.get(i);
    
                        SelectPhoneContact selectContact = new SelectPhoneContact();
    
                        //if a phone number is in our array of matching contacts
                        if (MatchingContactsAsArrayList.contains(phoneNumberofContact))
    
                        {   //add the selectContacts to the selectPhoneContacts array
                            // insert the contact at the beginning of the listview
                            selectPhoneContacts.add(0, selectContact);
    
                            //In SelectContact class, so getItemViewType will know which layout to show
                            selectContact.setType_row("1");
    
    
                        } else {
                            // insert it at the end (default)
                            selectPhoneContacts.add(selectContact);
                            selectContact.setType_row("2");
    
    
                        }
    
                        selectContact.setName(phoneNameofContact);
                        selectContact.setPhone(phoneNumberofContact);
    
                    }
    
                    return null;
    
                }
    
                @Override
                protected void onPostExecute(Void aVoid) {
                    super.onPostExecute(aVoid);
    
                    PopulistoContactsAdapter adapter = new PopulistoContactsAdapter(selectPhoneContacts, NewContact.this);
    
                    recyclerView.setAdapter(adapter);
                    recyclerView.setLayoutManager((new LinearLayoutManager(NewContact.this)));
    
      adapter.notifyDataSetChanged();
    
    
                }
            }
    
    
            @Override
            protected void onResume() {
                super.onResume();
    
            }
    
            //for the Public Contacts button
            private void phoneContactsButton() {
    
                phoneContacts.setOnClickListener(new View.OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
    
                        PopulistoContactsAdapter adapter = new PopulistoContactsAdapter(selectPhoneContacts, NewContact.this);
    
                        recyclerView.setAdapter(adapter);
                        // recyclerView.setLayoutManager((new LinearLayoutManager(NewContact.this)));
    
                        //loop through the matching contacts
                        int count = PopulistoContactsAdapter.theContactsList.size();
    
                        for (int i = 0; i < count; i++) {
    
                            //for  contacts that are checked (they can only be matching contacts)...
                            //PopulistoContactsAdapter.theContactsList.get(i).isSelected=true;
                            PopulistoContactsAdapter.theContactsList.get(i).setSelected(true);
    
    
                            //we need to notify the recyclerview that changes may have been made
                            adapter.notifyDataSetChanged();
                        }
                    }
    
    
                });
    
            }
    
            private void checkboxnull() {
    
    
                //adapter.setOnClickListener(new PopulistoContactsAdapter.OnClickListener() {
                 PopulistoContactsAdapter adapter = new PopulistoContactsAdapter(selectPhoneContacts, NewContact.this);
    
    
                    adapter.SetOnCheckBoxClickListener(new PopulistoContactsAdapter.OnCheckBoxClickListener() {
    
    
                    @Override
                    public void onCheckBoxClick(boolean isChecked) {
                        if (isChecked)
                            ++check_counter;
                        else
                            --check_counter;
    
    
                        if (check_counter <= 0)
                            Toast.makeText(NewContact.this, "all unchecked!", Toast.LENGTH_SHORT).show();
    
    
                    }
    
    
                });
            }
    
    
            //create a method in your first activity, (where the button color should change):
            public void changeColorInFirstActivity(){
               // Button btnA = (Button) findViewById(R.id.btnPhoneContacts);
                phoneContacts.setBackgroundColor(Color.RED);
            }
    }
    

    和我的适配器:

    public class PopulistoContactsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder > {
            private Context mContext;
            //make a List containing info about SelectPhoneContact objects
            public static List<SelectPhoneContact> theContactsList;
            Context context_type;
            private OnCheckBoxClickListener onCheckBoxClickListener;
    
            public class MatchingContact extends RecyclerView.ViewHolder {
    
                //In each recycler_blueprint show the items you want to have appearing
                public TextView title, phone;
                public CheckBox check;
                public Button invite;
    
                public MatchingContact(final View itemView) {
                    super(itemView);
                    //title is cast to the name id, in recycler_blueprint,
                    //phone is cast to the id called no etc
                    title = (TextView) itemView.findViewById(R.id.name);
                    phone = (TextView) itemView.findViewById(R.id.no);
                    invite = (Button) itemView.findViewById(R.id.btnInvite);
                    check = (CheckBox) itemView.findViewById(R.id.checkBoxContact);
    
                }
    
            }
    
    
            public class nonMatchingContact extends RecyclerView.ViewHolder {
    
                //In each recycler_blueprint show the items you want to have appearing
                public TextView title, phone;
                public CheckBox check;
                public Button invite;
    
                public nonMatchingContact(final View itemView) {
                    super(itemView);
                    //title is cast to the name id, in recycler_blueprint,
                    //phone is cast to the id called no etc
                    title = (TextView) itemView.findViewById(R.id.name);
                    phone = (TextView) itemView.findViewById(R.id.no);
                    invite = (Button) itemView.findViewById(R.id.btnInvite);
                    check = (CheckBox) itemView.findViewById(R.id.checkBoxContact);
    
                }
    
            }
    
            @Override
            public int getItemViewType(int position) {
                //for each row in recyclerview, get the getType_row, set in NewContact.java
                return Integer.parseInt(theContactsList.get(position).getType_row());
            }
    
            public PopulistoContactsAdapter(List<SelectPhoneContact> selectPhoneContacts, Context context) {
                //selectPhoneContacts = new ArrayList<SelectPhoneContact>();
    
    
                theContactsList = selectPhoneContacts;
    
    
                this.mContext = context;
               // whichactivity = activity;
                context_type = context;
    
    
            }
    
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
                View itemView;
    
                //if getType_row is 1...
                if (viewType == 1)
    
    
                {
    
    
                    Context context = parent.getContext();
                    LayoutInflater inflater = LayoutInflater.from(context);
    
    
                    itemView = inflater.inflate(R.layout.recycler_blueprint, parent, false);
    
                    //itemView.setTag();
                    return new MatchingContact(itemView);
    
    
                } else {
    
    
                    Context context = parent.getContext();
                    LayoutInflater inflater = LayoutInflater.from(context);
    
    
                    itemView = inflater.inflate(R.layout.recycler_blueprint_non_matching, parent, false);
    
    
                    return new nonMatchingContact(itemView);
    
    
                }
    
    
            }
    
    
            @Override
            public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
                //bind the views into the ViewHolder
                //selectPhoneContact is an instance of the SelectPhoneContact class.
                //We will assign each row of the recyclerview to contain details of selectPhoneContact:
    
    
                //The number of rows will match the number of phone contacts
                final SelectPhoneContact selectPhoneContact = theContactsList.get(position);
    
    
                //if the row is a matching contact
                if (viewHolder.getItemViewType() == 1)
    
    
                {
                    //in the title textbox in the row, put the corresponding name etc...
                    ((MatchingContact) viewHolder).title.setText(selectPhoneContact.getName());
                    ((MatchingContact) viewHolder).phone.setText(selectPhoneContact.getPhone());
                    ((MatchingContact) viewHolder).check.setChecked(theContactsList.get(position).getSelected());
                    ((MatchingContact) viewHolder).check.setTag(position);
    
    
                    ((MatchingContact) viewHolder).check.setOnClickListener(new View.OnClickListener() {
    
    
                        @Override
                        public void onClick(View v) {
    
    
                            //pos is the row number that the clicked checkbox exists in
                            Integer pos = (Integer) ((MatchingContact) viewHolder).check.getTag();
    
    
                            //NEED THIS TO PRESERVE CHECKBOX STATE
                            //because it is onClick, getSelected will always be the same value
                            //false or true, it doesn't matter
                            if (theContactsList.get(pos).getSelected()) {
                                theContactsList.get(pos).setSelected(false);
                                Toast.makeText(context_type, theContactsList.get(pos).getPhone() + " clicked!", Toast.LENGTH_SHORT).show();
    
    
                            } else {
    
    
                                theContactsList.get(pos).setSelected(true);
                                Toast.makeText(context_type, theContactsList.get(pos).getPhone() + " unclicked!", Toast.LENGTH_SHORT).show();
    
    
                            }
                        }
                    });
    
    
                    ((MatchingContact) viewHolder).check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        // ((MatchingContact) viewHolder).check.setOnClickListener(new CompoundButton.OnClickListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    
    
                            onCheckBoxClickListener.onCheckBoxClick(isChecked);
    
    
                        }
                    });
    
    
                }
                else {
    
    
                    ((nonMatchingContact) viewHolder).title.setText(selectPhoneContact.getName());
                    ((nonMatchingContact) viewHolder).phone.setText(selectPhoneContact.getPhone());
    
    
                }
            }
    
            @Override
            public int getItemCount() {
    
    
                return theContactsList.size();
            }
    
    
            public interface OnCheckBoxClickListener {
                void onCheckBoxClick(boolean ischecked);
            }
    
    
            public void SetOnCheckBoxClickListener(final OnCheckBoxClickListener onCheckBoxClickListener) {
                this.onCheckBoxClickListener = onCheckBoxClickListener;
            }
    
    
        }
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Naveen Dew    7 年前

    使用接口

    在中定义此接口 Adapter

    private OnCheckBoxClickListener onCheckBoxClickListener;
    
    public interface OnCheckBoxClickListener {
        void onCheckBoxClick(boolean ischecked);
    }
    

    添加

    public void SetOnCheckBoxClickListener(final OnCheckBoxClickListener onCheckBoxClickListener) {
        this.onCheckBoxClickListener = onCheckBoxClickListener;
    }
    

    使现代化 onBindViewHolder

    ((MatchingContact) viewHolder).check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        // ((MatchingContact) viewHolder).check.setOnClickListener(new CompoundButton.OnClickListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    
            onCheckBoxClickListener.onCheckBoxClick(isChecked);
    
        }
    });
    

    在里面 Activity/Fragment

    int check_counter = 0;
    
        mAdapter.SetOnCheckBoxClickListener(new YourAdapterClass.OnCheckBoxClickListener() {
            @Override
            public void onCheckBoxClick(boolean ischecked) {
                if (ischecked)
                    ++check_counter;
                else
                    --check_counter;
    
                if (check_counter <= 0)
                    Toast.makeText(context, "all unchecked!", Toast.LENGTH_SHORT).show();
    
    
            }
    
        });
    
        2
  •  1
  •   regev avraham    7 年前

    可以使用全局变量存储所选复选框的计数,然后在每个已更改复选框的事件上更新计数(根据选中的值添加或子结构),如果更新后计数为0,则所有复选框都将取消选中

    诸如此类:

    //if all the checkboxes are cheked by default
    int count = theContactsList.size();
    //if all the checkboxes are uncheked by defult
    int count = 0;
    

    ((MatchingContact) viewHolder).check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
    {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
        {
            if (!isChecked)
            {
                  count--;
            }
            else
            {
                  count++;
            }
            if(count<=0)
            {
                //all unchcked
            }
    
        }
    });
    
        3
  •  0
  •   CHarris    7 年前

    我设法用 onClickListener .

    在我的中:

        ((MatchingContact) viewHolder).check.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
    
    
            }
        });
    

    我说:

                    int count = 0;
                    int size = theContactsList.size();
                    for (int i = 0; i < size; i++) {
                        if (theContactsList.get(i).isSelected) {
                            count++;
                        }
                    }
                    if(count==0) {
                        Toast.makeText(context_type, "All unchecked!" , Toast.LENGTH_SHORT).show();
                    }