2015-03-31 69 views
0

我一直在處理一個問題,現在我似乎無法弄清楚,我正在嘗試將ArrayList<String>從活動傳遞到片段,但是,我得到以下堆棧跟蹤,當我運行的代碼傳遞ArrayList <String>從活動到Android中的片段

03-30 19:26:38.465 28955-28955/org.tcnjteamandroid.cryptochat E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: org.tcnjteamandroid.cryptochat, PID: 28955 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{org.tcnjteamandroid.cryptochat/org.tcnjteamandroid.cryptochat.drawer}: android.view.InflateException: Binary XML file line #24: Error inflating class fragment 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2299) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2361) 
      at android.app.ActivityThread.access$800(ActivityThread.java:145) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1279) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5240) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: android.view.InflateException: Binary XML file line #24: Error inflating class fragment 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
      at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
      at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
      at org.tcnjteamandroid.cryptochat.drawer.onCreate(drawer.java:53) 
      at android.app.Activity.performCreate(Activity.java:5933) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2252) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2361) 
            at android.app.ActivityThread.access$800(ActivityThread.java:145) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1279) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5240) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList android.os.Bundle.getStringArrayList(java.lang.String)' on a null object reference 
      at org.tcnjteamandroid.cryptochat.NavigationDrawerFragment.onCreateView(NavigationDrawerFragment.java:96) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:920) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
      at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1206) 
      at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2159) 
      at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:297) 
      at android.support.v7.app.ActionBarActivity.onCreateView(ActionBarActivity.java:547) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
            at org.tcnjteamandroid.cryptochat.drawer.onCreate(drawer.java:53) 
            at android.app.Activity.performCreate(Activity.java:5933) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2252) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2361) 
            at android.app.ActivityThread.access$800(ActivityThread.java:145) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1279) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5240) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

我使用傳遞這些信息,並把它撿起來的代碼如下:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_drawer); 

    mNavigationDrawerFragment = (NavigationDrawerFragment) 
      getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); 
    mTitle = getTitle(); 

    ArrayList<String> menuItems = new ArrayList<String>(); 
    menuItems.add("Test"); 

    Bundle bundle = new Bundle(); 
    bundle.putStringArrayList("edttext", menuItems); 
    /* set Fragmentclass Arguments */ 
    NavigationDrawerFragment fragobj = new NavigationDrawerFragment(); 
    fragobj.setArguments(bundle); 

    // Set up the drawer. 
    mNavigationDrawerFragment.setUp(
      R.id.navigation_drawer, 
      (DrawerLayout) findViewById(R.id.drawer_layout)); 

} 

,我使用的代碼拿起新參數是:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     ArrayList<String> strtext = getArguments().getStringArrayList("edttext"); 
     mDrawerListView = (ListView) inflater.inflate(
       R.layout.fragment_navigation_drawer, container, false); 
     mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       selectItem(position); 
      } 
     }); 
     mDrawerListView.setAdapter(new ArrayAdapter<String>(
       getActionBar().getThemedContext(), 
       android.R.layout.simple_list_item_activated_1, 
       android.R.id.text1, 
       strtext)); 
     mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
     return mDrawerListView; 
    } 

任何幫助,我可以得到將不勝感激!

+0

看來'getArguments()getStringArrayList(」。 edttext「)'返回null。也許你在閱讀/寫作時使用了錯誤的鑰匙?也許你忘了完全放棄它? – Raffaele 2015-03-31 21:17:40

+0

從堆棧跟蹤中,我們需要看到您的R.layout.activity_drawer。 – 2015-03-31 21:23:12

+0

我檢查過了,這不是問題,關鍵是edttext,它在每個實例中都正確使用。 – 2015-03-31 21:25:43

回答

0

您可以在活動中使用一類具有靜態的ArrayList財產

public class Values 
{ 
    public static ArrayList<String> myArrayList; 
} 

:在片段

ArrayList<String> menuItems = new ArrayList<String>(); 
Values.myArrayList = menuItems; 

ArrayList<String> strtext = Values.myArrayAdapter; 
相關問題