我开发了需要从外部 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");
而且我不知道如何以高效和优雅的方式将它们一起使用,或者我应该重新考虑一些事情吗?谢谢!