Android Studio(メモリストのアプリ02_ボタンとチェックボックスのリスナー)
■前回の設計に基づいてAndroidの画面を作成。
SQLiteを使用するつもりだけど、とりあえずxmlファイル、javaファイルで画面を作成する。
できたのがこれ。
一番上の「sampleProject006_SQLIte」はプロジェクト名でデフォルトで入るもの。作成したのは、BUTTON以下。ボタンの下にEditText(Note333となっている部分)、さらに下にLinearLayoutがあり、その中にチェックボックスが入っている。
OnClickListenerを使って、ボタンを押したときにEditTextの中身をもったチェックボックスを追加する。コードは下のもの。Empty Activityでプロジェクトを作成したときにonCreateもデフォルトで入るため、その中にコードを入れている。ここは起動時に動作する。
@Override
protected void onCreate(Bundle savedInstanceState) {
/** Empty Activityでデフォルトで設定 **/
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/** DatabaseHelperクラスの作成**/
省略
/** データベースの内容をチェックボックスに反映**/
省略
/** ボタンをクリックしたら、EditTextの内容でチェックボックスを追加**/
Button bt = (Button) findViewById(R.id.bt01);
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
LinearLayout ll1 = findViewById(R.id.linearLayout01);
EditText et = findViewById(R.id.et01);
CheckBox cb1 = new CheckBox(ll1.getContext());
cb1.setText(et.getText());
cb1.setOnCheckedChangeListener(MainActivity.this);
ll1.addView(cb1);
}
});
}
この中のsetOnCheckedChangeListenerでチェックボックスの状態が変わったときのリスナーを設定。ボタンと同じような方法でも実装できるのではと思うけど、こちらは、クラスにimplementsを使った上でメソッドを実装している。
public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
コードが下のもの。
/** チェックボックスが押されたときの挙動**/
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Log.i("Debug111", "チェックボックスが押されました");
LinearLayout ll1 = findViewById(R.id.linearLayout01);
ll1.removeViewAt(2);
Log.i("Debug222", "2番目削除");
} else {
Log.i("Debug333", "チェックボックスが押されてません");
}
}
コード中ではCompoundButtonとなっているけど、Androidのホームページを見ると、CheckBoxはこれのサブクラスだったので、あまり気にせず使用。
ログは、挙動を確認するために見ている。動作させると、ログが表示されて、チェックボックスが1つ消えている(2番目削除と書いたけど、0からカウントするので、removeViewAt(2)で消えるのは3番目だった)。
デバッグして、LinearLayoutの要素を見ると、入っているチェックボックスもmChildrenとして持っているので、チェックされているもののみ削除するといったことはできそう。