外部 API から JSON データを取得する必要がある Android アプリを開発し、このデータを使用して MultiChoice オプションを使用してダイアログを作成します。
それが良いアイデアかどうかはよくわかりませんが、BaseAdapter で API データを取得しており、それらをカスタム DialogFragment クラスに送信したいと考えています。これが私のコードと考え方のサンプルです:
データをダウンロードしてアダプターに渡す AsyncTask:
public void onTaskComplete(JSONObject result) {
MyCustomAdapter adapter = new MyCustomAdapter(...);
try {
adapter.setOptions(result.getJSONArray("data"));
} catch (JSONException e) {
e.printStackTrace();
}
...
アダプタ クラス:
public class MyCustomAdapter extends BaseAdapter {
public int itemCount = 0;
public CharSequence[] options;
public Context context;
public MyCustomAdapter(Context c) {
this.context = c;
}
public void setOptions(JSONArray data) {
options = new CharSequence[data.length()];
for(int i = 0; i < data.length(); i++) {
JSONObject obj;
try {
obj = data.getJSONObject(i).getJSONObject("someObj");
System.out.println(o.toString());
this.options[i] = o.getString("someString");
} catch (Exception e) {
e.printStackTrace();
}
}
}
...
ここに静的コンストラクターを持つ CustomDialog クラスがあります。
public class CustomDialog extends DialogFragment {
public static CustomDialog newInstance(CharSequence[] options) {
CustomDialog f = new CustomDialog();
Bundle args = new Bundle();
args.putCharSequenceArray("options", options);
f.setArguments(args);
return f;
}
...
これらのクラスを連携させたいのですが、Adapter を使用してデータを DialogFragment に渡すという設計ソリューションが適切かどうかはわかりません。ダイアログを表示するには、これらをアクティビティに入れる必要があります。
DialogFragment newFragment = CustomDialog.newInstance(someCharsequence);
newFragment.show(myActivity.this.getFragmentManager(), "somedialog");
そして、それらを効率的かつエレガントな方法で一緒に使用する方法がわかりませんか、何か再考する必要がありますか? ありがとう!