今回の内容
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 件のコメント:
コメントを投稿