我无法更新片段中的文本字段

时间:2014-06-25 19:09:53

标签: android android-fragments

我想更新位于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)

1 个答案:

答案 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");