今回の内容
Android Studio の ListViewにCheckBoxを追加して、チェックリストを作成したいと思います。これができれば結構使えるアプリになると思います。
ファイル達
・MyAdapter.java
・MainActivity.java
・MyData.java
・activity_main.xml
・list.xml
主にこのファイルを編集します。
最初にlist.xmlを作成する
ファイルの場所は以下のようにする。res > layout > list.xml
そしたらダイアログが開くので、
にする。
そしたら、一度list.xmlのコードを全て消して以下のコードを貼り付ける。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:id="@+id/checkBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:scaleX="1.1" android:scaleY="1.1" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="6dp" android:layout_weight="1" android:text="TextView"/> </LinearLayout> </LinearLayout>id checkBoxとid textView を作成しました。
MyAdapter.java
これは独自アダプターのコードになります。ここが結構重要になってきますので、コードをみたらしっかりと理解しておきましょう。MyAdapter.javaを作成するには、java > your.app.name > MyAdapterになるように作成します。
そして、
こう入力したら、リターンキーを押して決定します。
そして、一行目の package を除いて、消し、以下のコードを入力しましょう。
import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.TextView; public class MyAdapter extends ArrayAdapter<MyData> { private LayoutInflater mLayoutInflater; public MyAdapter(Context context, int resourceId, List<MyData> objects) { super(context, resourceId, objects); // getLayoutInflater()メソッドはActivityじゃないと使えない mLayoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } // getView()は各行を表示しようとした時に呼び出される @Override public View getView(int position, View convertView, ViewGroup parent) { // position のデータを取る MyData item = (MyData)getItem(position); // convertViewは使いまわされている可能性があるのでnullの時だけ新しく作る if (null == convertView) convertView = mLayoutInflater.inflate(R.layout.list, null); // MyDataのデータをViewの各ウィジェットにセットする TextView textView = convertView.findViewById(R.id.textView); textView.setText(item.getTextData()); CheckBox checkBox = convertView.findViewById(R.id.checkBox); checkBox.setOnCheckedChangeListener(null); checkBox.setChecked(item.isChecked()); checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { MyData MyData = getItem(position); MyData.setChecked(b); } }); return convertView; } }このコードはこの時点だとMyDataでエラーが発生しますが、焦らずに、この先の手順を行ってください。
MyData.java
このMyDataにはテキストのデータとチェックのデータが入っています。MyData.javaファイルを作成する方法は同じ感じでいいです。
package com.test.testapp; public class MyData { private String textData = ""; private Boolean checkdata = false; public void setTextdata(String str){ textData = str; } public String getTextData(){ return textData; } public void setChecked(boolean bool){ checkdata = bool; } public boolean isChecked(){ return checkdata; } }これを作成したら、MyAdapterのエラーがなくなると思います。なくらなかったら、コメントお願いします。
activity_main.xmlにListViewを設置する
id listViewのリストビューを設置しておいてください。idがlistViewであればどうでもいいです。
MainActivity.javaを編集する
onCreateに以下のコードを追加してください。ListView listView = findViewById(R.id.listView); List<MyData> list = new ArrayList<>(); MyData myData = new MyData(); myData.setTextdata("あああああ"); myData.setChecked(true); list.add(myData); MyData myData2 = new MyData(); myData2.setTextdata("いいいいい"); myData2.setChecked(false); list.add(myData2); MyAdapter adapter = new MyAdapter(MainActivity.this,R.layout.list,list); listView.setAdapter(adapter);
参考サイト:
[Android][Java] ListViewのCheckBoxの状態を管理する
【Android開発】チェックボックス付きListViewを作る方法
[Android][Java] ListViewのCheckBoxの状態を管理する
コメント、気軽にどうぞ!
0 件のコメント:
コメントを投稿