【发布时间】:2015-07-07 09:43:51
【问题描述】:
我在我的主要活动中使用多个片段现在我尝试访问每个片段的子片段,但是当它的子片段被访问时它给了我空异常。
点击 button1 时未更改数据,点击 button2 时应用程序崩溃。 这是我的代码:
MainActivity
public class MainActivity extends Activity {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
}
public void selectFrag(View view) {
Fragment fr;
if(view == findViewById(R.id.button1)) {
//add a fragment
fr = new FragmentOne();
TextView textView1 = (TextView) fr.getView().findViewById(R.id.textView1);
textView1.setText("Fragment One");
}else {
//add a fragment
fr = new FragmentTwo();
TextView textView2 = (TextView) fr.getView().findViewById(R.id.textView2);
textView2.setText("Fragment Two");
}
fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.commit();
}
}
FragmentOne
public class FragmentOne extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
//Inflate the layout for this fragment
return inflater.inflate(
R.layout.fragment_one, container, false);
}
}
片段二
public class FragmentTwo extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
/**
* Inflate the layout for this fragment
*/
return inflater.inflate(
R.layout.fragment_two, container, false);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Fragment No.1"
android:onClick="selectFrag" />
<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="selectFrag"
android:text="Fragment No.2" />
<fragment
android:name="com.javacodegeeks.android.fragmentstest.FragmentOne"
android:id="@+id/fragment_place"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
fragment_one.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#00ffff">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="This is fragment No.1"
android:textStyle="bold" />
</LinearLayout>
fragment_two.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffff00">
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="This is fragment No.2"
android:textStyle="bold" />
</LinearLayout>
点击按钮 2 时的崩溃报告:
07-07 14:41:40.505: E/AndroidRuntime(15175): FATAL EXCEPTION: main
07-07 14:41:40.505: E/AndroidRuntime(15175): Process: com.javacodegeeks.android.fragmentstest, PID: 15175
07-07 14:41:40.505: E/AndroidRuntime(15175): java.lang.IllegalStateException: Could not execute method of the activity
07-07 14:41:40.505: E/AndroidRuntime(15175): at android.view.View$1.onClick(View.java:3851)
07-07 14:41:40.505: E/AndroidRuntime(15175): at android.view.View.performClick(View.java:4466)
07-07 14:41:40.505: E/AndroidRuntime(15175): at android.view.View$PerformClick.run(View.java:18833)
07-07 14:41:40.505: E/AndroidRuntime(15175): at android.os.Handler.handleCallback(Handler.java:808)
07-07 14:41:40.505: E/AndroidRuntime(15175): at android.os.Handler.dispatchMessage(Handler.java:103)
07-07 14:41:40.505: E/AndroidRuntime(15175): at android.os.Looper.loop(Looper.java:193)
07-07 14:41:40.505: E/AndroidRuntime(15175): at android.app.ActivityThread.main(ActivityThread.java:5299)
07-07 14:41:40.505: E/AndroidRuntime(15175): at java.lang.reflect.Method.invokeNative(Native Method)
07-07 14:41:40.505: E/AndroidRuntime(15175): at java.lang.reflect.Method.invoke(Method.java:515)
07-07 14:41:40.505: E/AndroidRuntime(15175): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
07-07 14:41:40.505: E/AndroidRuntime(15175): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
07-07 14:41:40.505: E/AndroidRuntime(15175): at dalvik.system.NativeStart.main(Native Method)
07-07 14:41:40.505: E/AndroidRuntime(15175): Caused by: java.lang.reflect.InvocationTargetException
07-07 14:41:40.505: E/AndroidRuntime(15175): at java.lang.reflect.Method.invokeNative(Native Method)
07-07 14:41:40.505: E/AndroidRuntime(15175): at java.lang.reflect.Method.invoke(Method.java:515)
07-07 14:41:40.505: E/AndroidRuntime(15175): at android.view.View$1.onClick(View.java:3846)
07-07 14:41:40.505: E/AndroidRuntime(15175): ... 11 more
07-07 14:41:40.505: E/AndroidRuntime(15175): Caused by: java.lang.NullPointerException
07-07 14:41:40.505: E/AndroidRuntime(15175): at com.javacodegeeks.android.fragmentstest.MainActivity.selectFrag(MainActivity.java:37)
07-07 14:41:40.505: E/AndroidRuntime(15175): ... 14 more
【问题讨论】:
标签: android android-fragments android-fragmentactivity