我正在写一个Android应用程序。其中一个活动是ListActivity,因此当人选择列表中的项目时,我希望该项目的文本值存储在Intent / Bundle中,以便下一个活动知道该值。我的代码看起来像这样:
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View view,
int position, long id) {
Intent intent = new Intent(view.getContext(), FavoriteEditFromDest.class);
intent.putExtra("com.example.myapp.Name", ((TextView) view).getText());
startActivity(intent);
}
});
}
要启动的活动的onCreate方法如下所示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favorite_dest_edit);
// nameB is a global string variable defined above.
nameB = savedInstanceState.getString("com.example.myapp.Name");
}
当我从ListActivity中的列表中单击某个项目时,它开始执行onCreate代码,但是当它到达尝试检索字符串值的行时,我会得到一个强制关闭对话框。
我没有太多使用Bundle传递信息的经验,所以我将非常感谢所有人的帮助!
答案 0 :(得分:4)
nameB = savedInstanceState.getString("com.example.myapp.Name");
应替换为
Bundle bundle = getIntent().getExtras();
nameB = bundle.getString("com.example.myapp.Name");
尝试一下,看看它是否有帮助。
答案 1 :(得分:1)
在Eclipse中使用adb logcat
,DDMS或DDMS透视图来检查堆栈跟踪并查看触发“强制关闭”的异常。
在这种情况下,我怀疑您会发现您放入Bundle
的内容不是String
,因为getText()
不会返回String
。但是,这只是猜测 - 您的堆栈跟踪应该告诉您更多。
答案 2 :(得分:0)
其他问题
intent.putExtra("com.example.myapp.Name", ((TextView) view).getText());
应该是
intent.putExtra("com.example.myapp.Name", ((TextView) view).getText().toString());