【问题标题】:why is my getTag, setTag, getSelected, setSelected on checkbox is not giving me Toast I'm looking for为什么我的 getTag、setTag、getSelected、setSelected on checkbox 没有给我我正在寻找的 Toast
【发布时间】:2018-01-21 18:17:21
【问题描述】:

在我看来,这似乎不符合逻辑,但...我知道它不是,因为我正在处理的是一台计算机,而且我是一个人。

无论我的复选框是选中还是未选中,我都会收到toast

'...clicked!'

如果我的checkbox 未选中,我想干杯,'...unclicked!'

在我的模型中,SelectPhoneContact 我有:

//this is for the checkbox
    //by default, make it unchecked
    boolean isSelected = false;

    public boolean getSelected() {
        return isSelected;
    }

    public void setSelected(boolean selected){

            isSelected = selected;

    }

我正在使用recyclerView。在我的onBindViewHolder 我有:

 @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();

                    if (theContactsList.get(pos).isSelected=true)
                    {
                      //  theContactsList.get(pos).setSelected(true);
                        Toast.makeText(context_type, theContactsList.get(pos).getPhone() + " clicked!", Toast.LENGTH_SHORT).show();

                    } else {
                        //theContactsList.get(pos).setSelected(false);
                        Toast.makeText(context_type, theContactsList.get(pos).getPhone() + " unclicked!", Toast.LENGTH_SHORT).show();

                    }
                }
            });

【问题讨论】:

  • if (theContactsList.get(pos).isSelected=true) - 你有一个赋值,而不是相等运算符。将= 更改为==。或者只是if (theContactsList.get(pos).isSelected)
  • 现在,无论是if (theContactsList.get(pos).isSelected==true) 还是if (theContactsList.get(pos).isSelected),我都会得到“unclicked”。有什么想法吗?
  • 对于Checkboxes,您应该使用OnCheckedChangeListener,而不是OnClickListener。您可能也想取消评论那些 setSelected() 电话。
  • 实际上,当您切换到OnCheckedChangeListener 时,boolean isChecked 将被传递到其方法中,因此您可以将setSelected() 调用从if-else 中拉出,然后执行@ 987654345@。 (无论如何,看起来你已经把值倒过来了。)

标签: java android android-recyclerview boolean


【解决方案1】:

if (theContactsList.get(pos).isSelected=true) 中你应该有== 或者更好的是写if (theContactsList.get(pos).isSelected)

【讨论】:

  • 现在,无论是if (theContactsList.get(pos).isSelected==true) 还是if (theContactsList.get(pos).isSelected),我都会得到“unclicked”。有什么想法吗?
  • @CHarris 你取消注释 setSelected 调用了吗?
  • 不管它是否被评论,都没有区别——它仍然是“未点击”的。我认为上面的 Mike M 走在正确的轨道上,现在正在调查。
【解决方案2】:

感谢上面 Mike M 的 cmets,这很好用:

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

                    //pos is the row number that the clicked checkbox exists in
                    Integer pos = (Integer) ((MatchingContact) viewHolder).check.getTag();

                    //set the value of the checkbox accordingly onCheckedChange,
                    //to true or false
                    theContactsList.get(pos).setSelected(isChecked);

                    if(isChecked == true ) {
                        Toast.makeText(context_type, theContactsList.get(pos).getPhone() + " clicked!", Toast.LENGTH_SHORT).show();

                    }

                    else {
                        Toast.makeText(context_type, theContactsList.get(pos).getPhone() + " unclicked!", Toast.LENGTH_SHORT).show();

                    }
                    //Toast.makeText(context_type, theContactsList.get(pos).setSelected(isChecked), Toast.LENGTH_SHORT).show();


                }
            });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多