teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

編集

2017/06/16 05:18

投稿

hiro094
hiro094

スコア26

title CHANGED
File without changes
body CHANGED
@@ -109,4 +109,20 @@
109
109
  chkSelected = (CheckBox)itemView.findViewById(R.id.chk_selected);
110
110
  }
111
111
  }
112
- ```
112
+ ```
113
+
114
+ ###追記2(2017/06/16 14:08)
115
+ リストの数が2つ以上の場合、ActionModeが切り替わってからのチェックが2つめからのチェックが付かない事が発覚しました。
116
+ 何故かsetOnCheckedChangeListenerが2回目から呼ばれていないようです。
117
+ おそらくViewの部分だと思うのですが、かなり回りくどいことをしているように思います。
118
+
119
+
120
+ リストに画像を入れない場合、ListFragment#onActivityCreated内に以下だけを書くだけでチェックボックスまわりは全て動作出来ます。
121
+ ```java
122
+ setListAdapter(new ArrayAdapter<String>(
123
+ getActivity(),
124
+ android.R.layout.simple_list_item_checked,
125
+ mItems));
126
+ ```
127
+
128
+ ここにImageViewを表示させたいだけなのですが、そうなるとArrayAdapterをカスタマイズしないといけない+なぜかチェックボックスまわりが機能しなくなってしまいます。

1

追記

2017/06/16 05:18

投稿

hiro094
hiro094

スコア26

title CHANGED
File without changes
body CHANGED
@@ -58,4 +58,55 @@
58
58
  return convertView;
59
59
  }
60
60
 
61
+ ```
62
+
63
+
64
+
65
+ ###追記(2017/06/15 20:53)
66
+ ViewHolderを実装しても駄目だったのですが、チェックボックスの値を別に保持する必要があるとの記事を他に見たので、試しにそのような実装をAdapter#getViewのほうに追記した所チェックが反映されるようになりました。ただ、この記述方法がはたして正しいのか分からないので、これで正しいか、他に正しいor綺麗な記述方法があれば引き続きご回答よろしくお願いします。
67
+
68
+ ```java
69
+ Adapter内
70
+
71
+ @Override
72
+ public View getView(final int position, View convertView, ViewGroup parent) {
73
+ final ReviewMemo item = (ReviewMemo) this.getItem(position);
74
+ ViewHolder holder;
75
+
76
+ if(convertView == null) {
77
+ convertView = layoutInflater.inflate(R.layout.list_item, parent, false);
78
+ holder = new ViewHolder(convertView);
79
+ convertView.setTag(holder);
80
+ checked.add(false);
81
+ }else{
82
+ holder = (ViewHolder)convertView.getTag();
83
+ }
84
+ holder.tvTitle.setText(item.getTitle());
85
+
86
+ //checkedというListメンバを作り、保持するようにしました。
87
+ holder.chkSelected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
88
+ @Override
89
+ public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
90
+ checked.set(position, arg1); //チェックが変わるたびに
91
+ }
92
+ });
93
+ holder.chkSelected.setChecked(checked.get(position));
94
+
95
+ return convertView;
96
+ }
97
+
98
+ class ViewHolder{
99
+
100
+ final TextView tvIndex;
101
+ final ImageView ivAvatar;
102
+ final TextView tvTitle;
103
+ final CheckBox chkSelected;
104
+
105
+ public ViewHolder(View itemView) {
106
+ tvIndex = (TextView) itemView.findViewById(R.id.tv_title);
107
+ ivAvatar = (ImageView) itemView.findViewById(R.id.iv_avatar);
108
+ tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
109
+ chkSelected = (CheckBox)itemView.findViewById(R.id.chk_selected);
110
+ }
111
+ }
61
112
  ```