APIで一覧表示までできたので表示設定としてスイッチをリスト化してみました。
こんな感じ。
まずはスイッチのレイアウトを定義します。
1 2 3 4 5 6 7 8 9 10 11 |
<LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <Switch android:id="@+id/switch1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Switch" /> </LinearLayout> |
アダプタを編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class MyAdapter extends BaseAdapter { static class ViewHolder { Switch switch1; } ... public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; convertView = layoutInflater.inflate(R.layout.list_seting,parent,false); holder = new ViewHolder(); holder.switch1 = convertView.findViewById(R.id.switch1); convertView.setTag(holder); holder.switch1.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener(){ public void onCheckedChanged(CompoundButton comButton, boolean isChecked){ try { String str = ceList.get(position).getString("MarketAssetCode") + " : " + isChecked; Toast toast = Toast.makeText(context, str, Toast.LENGTH_SHORT); toast.show(); }catch (JSONException e) { Log.e("API",e.getMessage()); } } } ); ... |
ViewHolderクラスを作ってセットしているけど今回は対象が1つだけなので
1 2 3 |
Switch sw = convertView.findViewById(R.id.switch1); convertView.setTag(sw); sw.setOnCheckedChangeListener(...); |
としておけば色々省略できます。
またgetViewメソッドの最初で次のような書き方もあった。
1 2 3 4 5 |
if(convertView != null){ holder = (ViewHolder) convertView.getTag(); }else{ .... } |
これだとスクロール時にスイッチが使い回しされてしまうのでなくしました。
凄い量のスイッチを作成できました
所感
とりあえずそれっぽいものができてますが色々とだるい。
動き始めるまでが簡単だけど、ちゃんと動かすのに手間取る感じがします。
相性が悪いのか、新しく何かする時のつまずきか。
あとはローカルストレージに設定を保存して、色々拡張していったら完成しそうではあるけどAndroidStudioはしばらく放置しようかと思います。