2016-07-22 11 views
1

ToggleButtonを私のアプリケーションでブックマークのように使用しようとしました。私はこれを初めて使用しています。私は以下のようにonCreateView()の下で私のトグルボタンを宣言している:アンドロイドのトグルボタンの状態は常にtrue

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)に電話をしたら、それも偽になります。しかし、もう一度クリックすると、「偽」の代わりに「真」と表示されます。

なぜこのようなことが起こるのかわかりません。私はそれをクリックする度にトグルしたいだけです。 Plsは私を助ける!事前に感謝:)

+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回変更されたので、あなたは再びそれをやっ、状況を確認し変更します。

2

setChecked()コールでボタンの状態を反転させているのは、onClick()です。あなたが状況を追跡することを気にする必要はありませんので

は、代わりにOnClickListenerOnCheckedChangeListenerを使用します。

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

    }); 
} 
関連する問題