0

你能帮我吗,如果有什么办法,如何从类扩展 ArrayAdapter 调用方法 startActivityForResult(..)?

谢谢。

编辑:ARRAYADAPTER 的添加代码:

有 MyAdapter 类的代码:

public class MyAdapter extends ArrayAdapter {

public static final String bundle_text = "some_text";

public MyAdapter(Context context, int textViewResourceId, List<MyAdapterItem> data) {
    super(context, textViewResourceId, data);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;

    // ...

    row.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            Intent intent = new Intent(getContext(), MyNewActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            int id = 1;

            Bundle bundle = new Bundle();
            bundle.putLong(MyAdapter.bundle_text, id);

            intent.putExtras(bundle);
            getContext().startActivity(intent);
        }
    });

    return super.getView(position, convertView, parent);
}

}

一切正常,但无法从 ArrayAdapter 类调用 startActivityForResult,我只能调用 startActivty。但是在MyNewActivity完成后,我想刷新listview,但是当我无法调用startActivityForResult时,我不知道怎么做。

4

1 回答 1

1

这是一个常见的误解(就像旧线程一样,我只会给出一个大纲)

  1. 适配器仅用于列出视图的数据 - 它确实返回一个视图,就像您的 getView 中的一行一样,但并不真正处理任何 GUI 事件 - 这些是在活动中完成的。事实上,如果适配器从 Internet 或数据库加载大量行,它应该在 UI 线程之外完成。

  2. 活动是为了事件。您将单击侦听器附加到活动中的列表视图。那么调用例如细节编辑活动就没有问题了 - 它都在 UI 线程上。所以从 UI 线程启动一个活动没有问题。

  3. 更新适配器的问题!如果您从详细活动返回,您会发现列表未更新,因为适配器未更新。为此,请启动 RESULT 的详细活动。不要用任何适配器的东西把细节“表格”弄得乱七八糟。实际上,您可以选择将创建或编辑的 POJO 详细记录返回,而完全不理会数据库。

  4. 现在在您的活动中,您侦听 onActivityResult() 并插入适配器(如果您在应用程序中有 SQLite,则插入数据库后端),然后通知列表视图的数据已更改。它将自动更新列表视图。

如果重新加载列表视图,性能可能会成为问题。在大多数情况下,您可以通过添加到适配器并简单地通知列表视图数据已更改来摆脱困境。由于数据显示是“增量”的,您可能已经编辑了显示的第 1 - 5 行的第 3 行。那么列表视图只会刷新那 1-5 行的显示位置。但是,如果您在仅更改 1 行时重新加载说 500 行,您可能会遇到性能问题:)

于 2015-01-06T02:12:00.893 回答