2016-07-22 19 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(); 
     } 

    }); 
}