【问题标题】:android toggle button state always trueandroid切换按钮状态始终为真
【发布时间】:2016-07-22 18:15:58
【问题描述】:

一直在尝试使用ToggleButton 在我的应用程序中充当书签之类的东西。我第一次使用这个。我在onCreateView() 下声明了我的切换按钮,如下所示:

 bmark = (ToggleButton) v.findViewById(R.id.bmark);
        bmark.setChecked(false);

我正在尝试切换状态并显示Toast 消息!我尝试了以下方法:

 public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        bmark.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean status;
                if (bmark.isChecked()) status = true;
                else status = false;
                Log.w("Bmark status",String.valueOf(status));
                if (status) {
                    bmark.setChecked(false);
                    Log.w("Bmark after true",String.valueOf(bmark.isChecked()));
                    Toast.makeText(getActivity(), "Bookmark removed!", Toast.LENGTH_SHORT).show();
                } else {
                    bmark.setChecked(true);
                    Log.w("Bmark after false",String.valueOf(bmark.isChecked()));
                    Toast.makeText(getActivity(), "Post Bookmarked..!", Toast.LENGTH_SHORT).show();
                }
            }

        });

每次我按下按钮时,状态最初都是“真”,尽管我已将其设置为“假”。在我打电话给setChecked(false) 之后,它也变成了假的。但是当我再次点击它时,它再次显示“true”而不是“false”

我不知道为什么会这样。我只想在每次单击时切换它。请帮帮我!在此先感谢:)

【问题讨论】:

  • 仅供参考,接受的答案不是最佳解决方案,因为它需要处理布尔标志来跟踪状态。
  • 答案中的状态是附加的,因为是在原始代码中,可能它用在不同的地方,所以没有什么可以优化的。
  • @MaciejSikora 如果它是onClick() 中的局部变量,它如何在不同的地方使用?你的 cmets 没有任何意义。

标签: android togglebutton


【解决方案1】:

将代码更改为:

if (bmark.isChecked()){ 
status = true;
Toast.makeText(getActivity(), "Post Bookmarked..!",Toast.LENGTH_SHORT).show();
}
else {
status = false;
Toast.makeText(getActivity(), "Bookmark removed!", Toast.LENGTH_SHORT).show();
}

Toggle 改变了自检状态,你又做了一次,所以状态被改变了两次。

【讨论】:

    【解决方案2】:

    问题是您正在通过onClick() 中的setChecked() 调用来反转按钮的状态。

    使用OnCheckedChangeListener 而不是OnClickListener,这样您就不必费心跟踪状态:

    bmark.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                // checked
                Toast.makeText(getActivity(), "Post Bookmarked!", Toast.LENGTH_SHORT).show();
            } else {
                // not checked
                Toast.makeText(getActivity(), "Bookmark removed!", Toast.LENGTH_SHORT).show();
            }
        }
    });
    

    【讨论】:

      【解决方案3】:

      您似乎正在将按钮 返回 切换到之前在您的语句中的状态。如果您停止在 onClickListener 中更改按钮的状态,它应该可以正常工作。

       private boolean bmarkStatus = false;
       public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
      
          bmark.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                   bmarkStatus = bmark.isChecked();
                   if (bmark.isChecked()) Toast.makeText(getActivity(), "Bookmark removed!", Toast.LENGTH_SHORT).show();
                   else Toast.makeText(getActivity(), "Bookmark added!", Toast.LENGTH_SHORT).show();
              }
      
          });
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-20
        • 1970-01-01
        • 2011-06-16
        • 1970-01-01
        • 2020-08-20
        • 1970-01-01
        相关资源
        最近更新 更多