android切换按钮状态始终为true

时间:2016-07-22 18:15:58

标签: android togglebutton

尝试使用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();
                }
            }

        });

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

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

3 个答案:

答案 0 :(得分:2)

将代码更改为:

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

切换更改自检状态,您再次这样做,因此状态已更改两次。

答案 1 :(得分:2)

问题是您通过setChecked()中的onClick()来电反转了按钮的状态。

使用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();
        }
    }
});

答案 2 :(得分:1)

您似乎正在将按钮切换为您之前在语句中的内容。如果你停止在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();
        }

    });
 }