我想更新位于Fragment中的texfield,但在运行
时会出错从我的MainActivity,我发送一个变量到方法
DescripcionFragment desc = new DescripcionFragment();
desc.setTextdes(descripcion_local);
在DescripcionFragment中我正在获取并使用texfield
public static DescripcionFragment newInstance(int page, String title) {
DescripcionFragment fragmentsecond = new DescripcionFragment();
Bundle args = new Bundle();
args.putInt("someInt", page);
args.putString("someTitle", title);
fragmentsecond.setArguments(args);
return fragmentsecond;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
page = getArguments().getInt("someInt", 0);
title = getArguments().getString("someTitle");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.v_tab_desc, container, false);
return view;
}
public void setTextdes(String item) {
TextView view = (TextView) getView().findViewById(R.id.descripcion_desc);
view.setText(item);
}
错误
06-25 19:05:30.008 976-976/tuchillan.directoriochillan E/Trace﹕ error opening trace file: No such file or directory (2)
06-25 19:08:57.332 976-976/tuchillan.directoriochillan E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{tuchillan.directoriochillan/tuchillan.directoriochillan.FragmentLoca.Local_vista}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at tuchillan.directoriochillan.FragmentLoca.DescripcionFragment.setTextdes(DescripcionFragment.java:54)
at tuchillan.directoriochillan.FragmentLoca.Local_vista.onCreate(Local_vista.java:121)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
如果使用构造函数创建Fragment,则不会调用onCreateView
方法,但在将Fragment添加到Activity后系统会调用此方法。要设置TextView,请像在setArguments
中一样使用Fragment的newInstance
方法。
如果您需要稍后更改TextView,在正确创建片段后,您仍然可以使用setTextdes
方法。
示例:
public static DescripcionFragment newInstance(int page, String title, String description) {
DescripcionFragment fragmentsecond = new DescripcionFragment();
Bundle args = new Bundle();
args.putInt("someInt", page);
args.putString("someTitle", title);
args.putString("desription", description);
fragmentsecond.setArguments(args);
return fragmentsecond;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.v_tab_desc, container, false);
TextView view = (TextView) view.findViewById(R.id.descripcion_desc);
view.setText(getArguments().getString("description"));
return view;
}
要创建Fragment,您需要调用静态方法,当然:
DescripcionFragment desc = DescripcionFragment.newInstance(page, "title", "description");