将数据从BaseAdapter传递到DialogFragment

时间:2013-09-20 15:26:10

标签: android android-asynctask android-adapter

我开发Android应用程序,需要从外部API获取JSON数据 - 并使用此数据创建带有MultiChoice选项的Dialog。

我真的不知道这是不是一个好主意,但我正在使用BaseAdapter获取API数据,我想将它们发送到我的自定义DialogFragment类。 以下是我的代码和思维方式的示例:

AsyncTask,我下载数据并将其传递给Adapter:

    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");

我不知道如何以高效和优雅的方式将它们结合使用,或者我应该重新考虑一些事情?谢谢!

0 个答案:

没有答案