android 切换按钮状态始终为真
android toggle button state always true
一直在尝试使用 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)
之后,它也变成了false。但是当我再次点击它时,它再次读取 "true" 而不是 "false"
我不知道为什么会这样。我只想在每次单击时切换它。请帮帮我!提前致谢:)
将代码更改为:
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();
}
切换更改自检状态,您又做了一次,所以状态被更改了两次。
问题是您通过 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();
}
}
});
您似乎将 返回 按钮切换到您之前在声明中的状态。如果您停止在 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();
}
});
}
一直在尝试使用 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)
之后,它也变成了false。但是当我再次点击它时,它再次读取 "true" 而不是 "false"
我不知道为什么会这样。我只想在每次单击时切换它。请帮帮我!提前致谢:)
将代码更改为:
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();
}
切换更改自检状态,您又做了一次,所以状态被更改了两次。
问题是您通过 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();
}
}
});
您似乎将 返回 按钮切换到您之前在声明中的状态。如果您停止在 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();
}
});
}