2015-04-18 87 views
0

嗨,我試圖發送ArrayList扔捆綁碎片,我有這個問題(這個問題是因爲獲得ArrayList時引起的),我已經測試過發送它不爲空, 我有嘗試調用虛擬方法java.util.ArrayList使用包中的片段

arg.putStringArrayList("lp", li); 

把它與

ArrayList<String> lil = getArguments().getStringArrayList("lp"); 

接受它,這是堆棧跟蹤:

04-18 20:43:55.153 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList android.os.Bundle.getStringArrayList(java.lang.String)' on a null object reference 
04-18 20:43:55.153 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at com.pfe.elmokhtar.domotique.DetailFragment.onCreateView(DetailFragment.java:31) 
04-18 20:43:55.158 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.app.Fragment.performCreateView(Fragment.java:2053) 
04-18 20:43:55.158 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) 
04-18 20:43:55.158 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
04-18 20:43:55.158 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.app.BackStackRecord.run(BackStackRecord.java:833) 
04-18 20:43:55.158 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) 
04-18 20:43:55.160 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.app.FragmentManagerImpl$1.run(FragmentManager.java:447) 
04-18 20:43:55.160 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:739) 
04-18 20:43:55.160 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95) 
04-18 20:43:55.160 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.os.Looper.loop(Looper.java:135) 
04-18 20:43:55.160 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5254) 
04-18 20:43:55.160 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method) 
04-18 20:43:55.160 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372) 
04-18 20:43:55.160 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
04-18 20:43:55.160 17577-17577/com.pfe.elmokhtar.domotique W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 

,這是我如何實例化的片段

public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { 
      dLayout.closeDrawers(); 
      Bundle arg = new Bundle(); 
      arg.putString("Menu", menu[position]); 
      Fragment detail = new DetailFragment(); 
      FragmentManager fragmentManager = getFragmentManager(); 
      fragmentManager.beginTransaction().replace(R.id.content_frame, detail).commit(); 
      if (position == 0) { 
      /* 
      Pieces 
      */ 
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       invokeWS(); //WebService Invocation it run fine 

       arg.putStringArrayList("lp", li); 
       if(li.isEmpty()) 
        System.out.println("null Catched !"); 
      } 
       /* 
      Pieces 
      */ 


      if (position == 5) { 

       Intent intent = new Intent(Home.this, CheckLoginActivity.class); 
       intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(intent); 

      } 

     } 
    }); 

,這是類detailfragment

package com.pfe.elmokhtar.domotique; 

/** 
* Created by elmokhtar on 3/11/15. 
*/ 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import java.util.ArrayList; 


public class DetailFragment extends Fragment { 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle args) { 
     View view = inflater.inflate(R.layout.detailfragment, container, false); 
     //  TextView text= (TextView) view.findViewById(R.id.detail); 
     ListView list = (ListView) view.findViewById(R.id.list); 
     Bundle test = getArguments(); 
     //  String menu = getArguments().getString("Menu"); 
     try { 

      ArrayList <String> lil = test.getStringArrayList("lp"); 
      System.out.println("done!"); 


      ArrayAdapter <String> adapter; 
      adapter = new ArrayAdapter <String> (this.getActivity(), android.R.layout.simple_list_item_1, lil); 
      list.setAdapter(adapter); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     //text.setText("test"); 
     return view; 
    } 
} 
+0

用於實例的片段和DetailFragment.onCreateView()的代碼 – Gero

+0

我有updat的代碼粘貼到貼有detailfragment類和片段實例:) – Elmokh

+0

您沒有設置片段參數。我無法找到運行「arg.putStringArrayList(」lp「,li)的代碼片段;」 – Gero

回答

1
Fragment detail = new DetailFragment(); 
Bundle arg = new Bundle(); 
arg.putStringArrayList("lp", li); 
detail.setArguments(arg); 
FragmentManager fragmentManager = getFragmentManager(); 
fragmentManager.beginTransaction().replace(R.id.content_frame, detail).commit(); 
0

傳遞參數的片段,正如我在我的評論所說:

public void onItemClick(AdapterView <? > arg0, View v, int position, long id) { 
    dLayout.closeDrawers(); 
    Bundle arg = new Bundle(); 
    arg.putString("Menu", menu[position]); 
    arg.putStringArrayList("lp", li); 
    Fragment detail = new DetailFragment(); 
    detail.setArguments(arg); 
    FragmentManager fragmentManager = getFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.content_frame, detail).commit(); 
    //... 
} 
+0

謝謝:)我只是移動它 detail.setArguments(args); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction()。replace(R.id.content_frame,detail).commit(); 以^^結尾的方法 – Elmokh

0

創建實例的首選方法片段和將值傳遞給它電子

活動:創建片段實例類似這樣的

Fragment detail=DetailFragment.newInstace(li); 
fragmentManager.beginTransaction().replace(R.id.content_frame, detail).commit(); 

片段:總是創建片段

的所有子類的一個默認的構造片段必須包含一個公共的無參數構造函數。

public class DetailFragment extends Fragment { 

     public DetailFragment() { 
     } 

     public static Fragment newInstace(ArrayList<String> items) { 
      Fragment fragment = new DetailFragment(); 
      Bundle bundle = new Bundle(); 
      bundle.putStringArrayList("key", items); 
      fragment.setArguments(bundle); 
      return fragment; 
     } 

     //your stuff 

    } 
相關問題