2016-07-22 20 views
1

一直试图使用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)后,它也变成了错误。但是当我再次点击它,它再次读取“真”,而不是“假”

我不知道为什么它发生这样的事情。我只是想在每次点击时切换它。请帮助我!感谢提前:)

+0

FYI接受的答案是不是最佳的解决方案,因为它需要处理一个布尔标志保持状态轨道。 – earthw0rmjim

+0

状态在答案是额外的,因为在原始代码,也许它在不同的地方使用,所以没有什么最佳或没有。 –

+0

@MaciejSikora如果它是'onClick()'中的局部变量,它在不同的地方如何使用?你的评论没有任何意义。 – earthw0rmjim

回答

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

切换改变自我检查状态,你又做到了这样的状态被改变两次。

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

    }); 
}