android - 来自ArrayAdapter的startActivityForResult

时间:2012-04-24 16:55:03

标签: android android-arrayadapter

你能帮帮我,如果有什么办法,如何从类扩展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);
}

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时我不知道如何。

1 个答案:

答案 0 :(得分:1)

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

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

  2. 活动是为了活动。您将单击侦听器附加到活动中的列表视图。然后调用例如没有问题详细编辑活动 - 它全部在UI线程上。因此从UI线程启动活动没有问题。

  3. 更新适配器的问题!如果从详细活动返回返回,您会发现列表未更新,因为适配器未更新。为此,请为RESULT启动详细活动。不要用任何适配器东西弄乱细节“形式”。实际上,您可以选择返回在详细记录中创建或编辑的POJO,而不必担心数据库。

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

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