0

我有以下问题。我想从我的 ActivityA 中的数据库中读取数据并将一个选定的字符串发送到 ActivityB,它应该显示在 ListView 中。我正在使用意图这样做,它工作正常,但我只能显示一个字符串。我猜想在重新加载ActivityA之后,listView被清除了。

所以我尝试了以下操作:在一个名为 ArrayLst 的单独类中,我定义了这两个全局变量:

public static ArrayList<String> arrayList = new ArrayList<String>();
public static MyAdapter arrayAdapter=null;

在 ActivityA 中,我在 onClick 函数中执行此操作:

ArrayLst.arrayList.add(0, myEditText.getText().toString());
ArrayLst.arrayAdapter.notifyDataSetChanged();
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);

在 ActivityB 中,我想显示列表,所以我称之为:

lstView.setAdapter(ArrayLst.arrayAdapter);

但是,当我单击 ActivityA 中的按钮时,我的应用程序崩溃了。LogCat 说是因为这条线

ArrayLst.arrayAdapter.notifyDataSetChanged();

如果我删除这一行,它不会崩溃,但我没有得到任何结果。我究竟做错了什么?谢谢你的帮助。

ps:由于我是Android新手,请保持答案简单,以便我理解:)

4

1 回答 1

1

我想它会崩溃,因为您从未初始化 arrayAdapter。

为什么要使用自定义适配器(MyAdapter arrayAdapter)?

在 ActivityB 你应该有一个静态的 ArrayList (你似乎有)

public static ArrayList<String> arrayList = new ArrayList<String>();

然后,您需要在类全局范围内声明的 ActivityB 上的 ArrayAdapter

public static ArrayAdapter adapter;

然后在您的 onCreate 中,您将初始化适配器

adapter = new ArrayAdapter(this, android.R.simple_list_1, arrayList);

如果 ActivityB 扩展 ListActivity 那么你会打电话

setListAdapter(adapter);

如果 ActivityB 扩展了 Activity 那么你会调用

setContentView() 下的以下内容

ListView list = (ListView)findViewById(R.id.YOURLISTID);
list.setAdapter(adapter);

每当您向 ArrayList 添加数据时,您都会调用 ActivityB.adapter.notifyDataSetChanged()

在不知道您具体在做什么的情况下,我无法提出更好的想法,因为它可能与您想要完成的目标不一致。

于 2012-08-17T18:04:18.473 回答