情境:
用户Login
--->启动MainActivity
- > Navigation drawer
从操作栏中的菜单进入新活动
在新活动中,我有edittext
,其中包含简单的button
。
现在,如果我在edittext中添加一些文本并单击按钮,我将edittext放在一个包中,将其传递给MainActivity。
现在我的问题是我能够传递意图并获取捆绑包,但是当我尝试将该文本添加到listview应用程序崩溃时。
这是我的活动代码:
addlist = (ImageButton) findViewById(R.id.btnaddlist);
findViewById(R.id.btnaddlist).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View arg0) {
EditText edit = (EditText) findViewById(R.id.txtlist);
Intent i = new Intent(CreateList.this,
MainActivity.class);
Bundle bundle = new Bundle();
String ItemName = edit.getText().toString();
// Add your data from getFactualResults method to bundle
bundle.putString("ListItemName", ItemName);
// Add the bundle to the intent
i.putExtras(bundle);
startActivity(i);
}
});
}
这是我的HomeFragment:
ListView lv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
lv = (ListView)rootView .findViewById(R.id.list);
Bundle itemintent = getActivity().getIntent().getExtras();
String ItemName = itemintent.getString("ListItemName");
if (ItemName.equals("ListItemName")) {
/** Items entered by the user is stored in this ArrayList variable */
ArrayList<String> list = new ArrayList<String>();
list.add(ItemName);
/** Declaring an ArrayAdapter to set items to ListView */
ArrayAdapter<String> Listadapter;
Listadapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),android.R.layout.simple_list_item_1, list);
lv.setAdapter(Listadapter);
Listadapter.notifyDataSetChanged();
}
return rootView;
}
Logcat错误:
05-01 22:54:07.116: D/AndroidRuntime(19368): Shutting down VM
05-01 22:54:07.143: E/AndroidRuntime(19368): FATAL EXCEPTION: main
05-01 22:54:07.143: E/AndroidRuntime(19368): Process: com.sample.example, PID: 19368
05-01 22:54:07.143: E/AndroidRuntime(19368): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sample.example/com.sample.example.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.access$800(ActivityThread.java:148)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.os.Handler.dispatchMessage(Handler.java:102)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.os.Looper.loop(Looper.java:135)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.main(ActivityThread.java:5312)
05-01 22:54:07.143: E/AndroidRuntime(19368): at java.lang.reflect.Method.invoke(Native Method)
05-01 22:54:07.143: E/AndroidRuntime(19368): at java.lang.reflect.Method.invoke(Method.java:372)
05-01 22:54:07.143: E/AndroidRuntime(19368): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
05-01 22:54:07.143: E/AndroidRuntime(19368): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
05-01 22:54:07.143: E/AndroidRuntime(19368): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
05-01 22:54:07.143: E/AndroidRuntime(19368): at com.sample.example.HomeFragment.onCreateView(HomeFragment.java:28)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.Fragment.performCreateView(Fragment.java:2053)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.BackStackRecord.run(BackStackRecord.java:833)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1454)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.Activity.performStart(Activity.java:5968)
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2277)
05-01 22:54:07.143: E/AndroidRuntime(19368): ... 10 more
答案 0 :(得分:0)
根据您的评论,您将获得活动中的数据,但不会获取片段中的数据。也许你无法获得在片段中开始活动的意图数据,但我发现这很奇怪。
你可以解决问题。创建主活动后,获取该数据并将其保存到公共变量中。
public String itemName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
if(extras != null) {
itemName = extras.getString("ListItemName");
}
else{
// Something else is wrong
finish();
}
}
然后在你片段中做这个
String ItemName = ((MainActivity) getActivity()).itemName;
答案 1 :(得分:0)
请明确说明您的错误
空对象引用上的java.lang.String.equals(java.lang.Object)'
所以它在
其中if (ItemName.equals("ListItemName"))
为空的 ItemName
你能试试吗
this.getArguments().getString("ListItemName")
也使用
传递 fragment.setArguments(bundle);
以下是错误的
Bundle itemintent = getActivity().getIntent().getExtras();
String ItemName = itemintent.getString("ListItemName");
您正在访问捆绑值可能为null的活动的意图
答案 2 :(得分:0)
简单的方法;在MainActivity
String
获取bundle
String
并将其保存到另一个String
。稍后将Fragment
传递给Argument
s Bundle
s或更好String ItemName = itemintent.getString("ListItemName");
本身。
现在,您的问题String ItemName = null
可以翻译为getString("ListItemName")
,原因是null
返回String ItemName = itemintent.getString("ListItemName"
,"this default value helps prevent NPE"); //was added in api 12
您应该使用
String
这样你的错误就会消失,但这不是最终的解决方案,因为你想要一个返回的Bundle
,为此采用简单的方法。 这是一个疯狂的猜测,我很擅长我在想Intent
nullified
Activity
的原因是因为你的Intent
通过nullfied
'{:%Y-%m-%d}'.format(d)
重新创建