トグルボタンでオン状態からオフ状態に切り替えたときにアラートを表示しようとしていました。サイド リスト ビューのアダプタでトグル ボタンを使用します。以下の私のコードを参照してください。
また、ユーザーがトグル ボタンでオン状態からオフ状態に切り替えたときにアラートを表示したいと考えています。IsChecked() を使用しているときは、常に on から off または off から n のいずれかで呼び出されますが、On から off に切り替えるだけで Alert を表示する必要があります。
XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp" >
<TextView
android:id="@+id/state_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ToggleButton
android:id="@+id/statetoggleButton"
style="@style/on_off_togle_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/togllebuttonselector" />
アダプタ クラスは次のとおりです。
private final Activity context;
public final List<StatesModel> list;
AlertDialog alertDialog;
public List<StatesModel> getList() {
return list;
}
public StateListAdapter(Activity context, List<StatesModel> list) {
super(context, R.layout.states_list, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected ToggleButton checkbox;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.states_list, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.state_name);
viewHolder.checkbox = (ToggleButton) view
.findViewById(R.id.statetoggleButton);
viewHolder.checkbox
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(
final CompoundButton buttonView,
boolean isChecked) {
final StatesModel element = (StatesModel) viewHolder.checkbox
.getTag();
if (!isChecked) { AlertDialog.Builder builder =
new AlertDialog.Builder( context);
builder.setTitle("Warning"); String message =
"Title is here"
; builder.setMessage(message);
builder.setPositiveButton("OK", new
DialogInterface.OnClickListener() {
@Override public void onClick( DialogInterface
dialog, int which) { alertDialog.dismiss();
element.setSelected(buttonView .isChecked()); }
}); builder.setNegativeButton("Cancel", new
DialogInterface.OnClickListener() {
@Override public void onClick( DialogInterface
dialog, int which) { buttonView.setChecked(true);
alertDialog.dismiss(); } }); alertDialog =
builder.create(); alertDialog.show(); } else
element.setSelected(buttonView.isChecked());
}
});
view.setTag(viewHolder);
viewHolder.checkbox.setTag(list.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
holder.checkbox.setChecked(list.get(position).isSelected());
return view;
}
On Checked 変更方法にチェックを入れてください。