2016-07-22 2 views
1

ToggleButton을 사용하여 내 응용 프로그램에 북마크 종류로 사용하려고했습니다. 나는 이것을 처음으로 사용하고있다. 나는 아래 onCreateView()에서 내 토글 버튼을 선언 :android toggle 버튼 상태 항상 true

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

난 그냥 상태를 전환하고 Toast 메시지를 표시하는 것을 시도하고있다! 나는 아래 시도 : 나는 "false"로 그것을 설정 한하지만

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

     }); 

I 버튼을 누를 때마다, 상태가 처음 "true"로 읽습니다. setChecked(false)으로 전화하면 거짓이됩니다. 그러나 다시 클릭하면 다시 "true"와 "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

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

    }); 
}