动态创建片段给空指针异常之间的通信 [英] Communicating between Dynamically Created Fragment giving Null Pointer Exception
问题描述
我已创建了一个 ListFragment
和 onItemClick
每一个项目我试图打开列表的价值为其他片段
。
I have created One ListFragment
and ononItemClick
of each Item I trying to open the Value of the List into other Fragment
.
我已经成功创建了一个由有两个片段
,并在谷歌文档描述通过接口
通过活动传达他们
I have Sucessfully created that by having two fragments
and Communicated them through interface
via activity as Described in google docs.
不过,当我米试图创建一个新的片段
在每个项目上单击列表,并通过接口进行通信我得到一个空指针异常
上查看
But When I m trying to create a new Fragment
on each Item Click of List and communicating through interface I getting a Null Pointer Exception
on that View
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是:
My interface Method where I m inserting new Fragment into FrameLayout is:
@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)
任何帮助,是真正的鸭preciated ...
Any Help is Truly Appreciated...
推荐答案
这是因为在时间,当你调用details.setTextView(时间);片段的观点尚未建立。
你应该通过时间参数为碎片。在您的详细片段类中创建这种方法
It's because at time when you call details.setTextView(time); fragment's view was not created yet. You should pass time as argument into fragment. In your detail fragment class create this method
public static Detail newInstance(String time) {
Detail fragment = new Detail();
Bundle args = new Bundle();
args.putString("time", time);
fragment.setArguments(args);
return fragment;
}
然后你就可以得到的时间,并设置它onCreateView:
and then you can get time and set it in 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;
}
然后在你的活动创建片段是这样的:
Then in your activity create fragment like this:
@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();
}
这篇关于动态创建片段给空指针异常之间的通信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!