簡體   English   中英

空指針異常將捆綁數據從活動發送到片段

[英]Null Pointer Exception Sending Bundle Data From Activity to Fragment

我正在嘗試將捆綁包數據從活動類發送到片段類,但是我一直在收到NPE錯誤。 我對Stackoverflow進行了一些研究,並嘗試了一些不同的方法,但似乎都沒有效果。

我還有另一個活動類,將意圖發送給MainActivity類。 因此,將MainActivity.java中的捆綁發送給MyFragment類時,絕對不是null。

請幫忙! 謝謝! :D

MainActivity.java

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      setContentView(R.layout.activity_main);

      Bundle extras = getIntent().getExtras();
      if (extras != null) {
        Bundle bundle = new Bundle();
        String value = extras.getString("TEST36");
        bundle.putString("TEST36", value);
        MyFragment fragInfo = new MyFragment();
        fragInfo.setArguments(bundle);
      }
  }
}

MyFragment.java

public class MyFragment extends Fragment{
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup parent,
        Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_xml, parent, false);
   }
   @Override
   public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Bundle bundle = getArguments();                                             
    String myMode = bundle.getString("TEST36");
   }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_xml"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.example.test.MyFragment"> 
</fragment>

fragment_xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/TESTINGTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="26dp"
        android:layout_marginTop="21dp"
        android:layout_marginBottom="20dp"
        android:textSize="@dimen/text_size" />

</RelativeLayout>

Logcat

07-12 01:01:59.149: E/AndroidRuntime(2950): FATAL EXCEPTION: main
07-12 01:01:59.149: E/AndroidRuntime(2950): Process: com.example.test, PID: 2950
07-12 01:01:59.149: E/AndroidRuntime(2950): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.NullPointerException
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.os.Looper.loop(Looper.java:136)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.app.ActivityThread.main(ActivityThread.java:5017)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at java.lang.reflect.Method.invokeNative(Native Method)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at java.lang.reflect.Method.invoke(Method.java:515)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at dalvik.system.NativeStart.main(Native Method)
07-12 01:01:59.149: E/AndroidRuntime(2950): Caused by: java.lang.NullPointerException
07-12 01:01:59.149: E/AndroidRuntime(2950):     at com.example.Fragment.onActivityCreated(MyFragment.java:1098)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1508)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1884)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:566)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.app.Activity.performStart(Activity.java:5241)
07-12 01:01:59.149: E/AndroidRuntime(2950):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)
07-12 01:01:59.149: E/AndroidRuntime(2950):     ... 11 more

行中的問題

MyFragment fragInfo = new MyFragment();

您正在創建一個新的片段實例,並向其傳遞數據,但是該片段不是UI的一部分。 相反,您可能想通過使用以下內容在UI中找到片段實例

findFragmentById(R.id.my_fragment_id)

MyFragment fragInfo = new MyFragment();之后添加以下代碼MyFragment fragInfo = new MyFragment();

fragInfo.setArguments(bundle);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.my_fragment_id, fragInfo);
transaction.commit();

嘗試像這樣在onCreateView獲取數據

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
       Bundle savedInstanceState)
{
    String myValue = this.getArguments().getString("TEST36");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM