2013-12-17 16 views
0

我已經創建了一個ListFragmentonItemClick,我試圖將列表的值打開到其他Fragment在給出空指針的動態創建片段之間進行通信異常

我已經成功創建了兩個fragments,並通過interface通過Google文檔中描述的活動與他們進行了交流。

,但是當我米試圖建立在每個項目上單擊列出的新Fragment並通過接口通信我上查看得到一個Null Pointer Exception

public class Details extends Fragment { 

    ViewGroup view_details; 

    static int count; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     view_details = (ViewGroup) inflater.inflate(R.layout.details, container , false); 

     return view_details; 

    } 

    public void setTextView(String details_string){ 

     Log.d("TAG", ""+details_string.toString()); 

     TextView txt_view_details = (TextView) view_details.findViewById(R.id.txt_details); 

      //Getting Null POinter Here 

     txt_view_details.setText(details_string.toString()); 

    } 
} 

我的接口方法,其中餘米插入新的片段插入的FrameLayout是:

@Override 
    public void connectIt(String time) { 

     Details details = new Details(); 

     FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 

     fragmentTransaction.replace(R.id.frameLayout , details); 

     fragmentTransaction.addToBackStack(null); 

     if (details != null) { 

      details.setTextView(time); 

     } 

     fragmentTransaction.commit(); 

    } 


12-17 18:18:06.740: E/AndroidRuntime(15917): FATAL EXCEPTION: main 
12-17 18:18:06.740: E/AndroidRuntime(15917): java.lang.NullPointerException 
12-17 18:18:06.740: E/AndroidRuntime(15917): at com.raweng.fragmentdemo.Details.setTextView(Details.java:31) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at com.raweng.fragmentdemo.FragmentDemo.connectIt(FragmentDemo.java:46) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at com.raweng.fragmentdemo.ListData.updateIt(ListData.java:41) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at com.raweng.fragmentdemo.ListData.onListItemClick(ListData.java:34) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at android.app.ListFragment$2.onItemClick(ListFragment.java:160) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at android.widget.AdapterView.performItemClick(AdapterView.java:298) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at android.widget.AbsListView.performItemClick(AbsListView.java:1128) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2812) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at android.widget.AbsListView$1.run(AbsListView.java:3571) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at android.os.Handler.handleCallback(Handler.java:725) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at android.os.Looper.loop(Looper.java:153) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at android.app.ActivityThread.main(ActivityThread.java:5297) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at java.lang.reflect.Method.invokeNative(Native Method) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at java.lang.reflect.Method.invoke(Method.java:511) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
12-17 18:18:06.740: E/AndroidRuntime(15917): at dalvik.system.NativeStart.main(Native Method) 

任何幫助是真正讚賞...

+0

我在調用fragmentmanager的提交後調用onCreateView。嘗試切換你的if子句和fragmentTransaction.commit(); – andreasg

+0

@Nope同樣的事情仍然NullPOinter異常 – nitesh

回答

4

這是因爲在時間,當你調用details.se tTextView(時間);片段的視圖尚未創建。 您應該將時間作爲參數傳遞給片段。在您的詳細片段類創建這種方法

public static Detail newInstance(String time) { 
     Detail fragment = new Detail(); 
     Bundle args = new Bundle(); 
     args.putString("time", time); 
     fragment.setArguments(args); 
     return fragment; 
} 

,然後你可以得到的時間和設置在onCreateView:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     view_details = (ViewGroup) inflater.inflate(R.layout.details, container , false); 
     TextView txt_view_details = (TextView) view_details.findViewById(R.id.txt_details); 
     txt_view_details.setText(getArguments().getString("title")); 
     return view_details; 

    } 

然後在你的活動創建片段是這樣的:

@Override 
    public void connectIt(String time) { 

     Details details = Details.newInstance(time); 

     FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 

     fragmentTransaction.replace(R.id.frameLayout , details); 

     fragmentTransaction.addToBackStack(null); 

     fragmentTransaction.commit(); 

    }