java - 无法在 fragment 中声明按钮

标签 java android android-fragments

我正在尝试在我的应用程序上声明一个按钮(它在 fragment 上),我尝试过的是:

TextView tvPregunta = (TextView) getActivity().findViewById(R.id.tvPregunta);

它不会给我一个错误,但是当我启动应用程序时它会......

我的 LogCat 错误是:

01-30 08:22:18.865  16165-16165/joancolmenero.taulaperiodica.com.taulaperiodicaapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: joancolmenero.taulaperiodica.com.taulaperiodicaapp, PID: 16165
java.lang.NullPointerException
        at joancolmenero.taulaperiodica.com.taulaperiodicaapp.JocFragment.seguentelement(JocFragment.java:102)
        at joancolmenero.taulaperiodica.com.taulaperiodicaapp.JocFragment.onCreateView(JocFragment.java:90)
        at android.app.Fragment.performCreateView(Fragment.java:1700)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
        at android.app.BackStackRecord.run(BackStackRecord.java:684)
        at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
        at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5102)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)

这一行是 TextView tvPregunta。 :

at joancolmenero.taulaperiodica.com.taulaperiodicaapp.JocFragment.seguentelement(JocFragment.java:102)

这个是seguentelement();:

at joancolmenero.taulaperiodica.com.taulaperiodicaapp.JocFragment.onCreateView(JocFragment.java:90)

seguentelement() 它是一个由 onCreateView 创建的 private void,所以我的问题是为什么这个 TextView 崩溃了?

我有一个onCreateView,其中我有 Root View 和voids的调用...

onCreateView

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.joc_fragment, container, false);

// Titol del joc
        TextView tvJuego = (TextView) rootView.findViewById(R.id.tvJuego);
        // shadow del textview
        tvJuego.setShadowLayer(1, 0, 3, Color.GRAY);
        // creem una variable per a cada ib

        // NewGame HIDEEEEEEEEEE
        NewGame = (Button)rootView.findViewById(R.id.btNewGame);
        NewGame.setVisibility(View.INVISIBLE);
        NewGame.setText("");


        // IB --> ID imageButton
        berijuego=(ImageButton)rootView.findViewById(R.id.ibBeriJuego);
        borojuego=(ImageButton)rootView.findViewById(R.id.ibBoroJuego);
        cobajuego=(ImageButton)rootView.findViewById(R.id.ibCobaJuego);
        indijuego=(ImageButton)rootView.findViewById(R.id.ibIndiJuego);
        hidrojuego=(ImageButton)rootView.findViewById(R.id.ibHidroJuego);
        ununjuego=(ImageButton)rootView.findViewById(R.id.ibUnunJuego);
        plutojuego=(ImageButton)rootView.findViewById(R.id.ibPlutoJuego);
        radijuego=(ImageButton)rootView.findViewById(R.id.ibRadiJuego);
        promjuego=(ImageButton)rootView.findViewById(R.id.ibPromJuego);
        sodijuego=(ImageButton)rootView.findViewById(R.id.ibSodiJuego);
        zicrojuego=(ImageButton)rootView.findViewById(R.id.ibZicroJuego);
        molijuego=(ImageButton)rootView.findViewById(R.id.ibMoliJuego);
        // setOnClickListener para todoos
        berijuego.setOnClickListener(this);
        borojuego.setOnClickListener(this);
        cobajuego.setOnClickListener(this);
        indijuego.setOnClickListener(this);
        hidrojuego.setOnClickListener(this);
        ununjuego.setOnClickListener(this);
        plutojuego.setOnClickListener(this);
        radijuego.setOnClickListener(this);
        promjuego.setOnClickListener(this);
        sodijuego.setOnClickListener(this);
        zicrojuego.setOnClickListener(this);
        molijuego.setOnClickListener(this);

        //Nivellactual 12 MAX o aun quedan errores

        if ((nivellactual <= 12) || (errores > 0)) {
            nivellactual = nivellactual + 1;
            seguentelement();
        }

        return rootView;
    }

然后它在这里崩溃了:

public void seguentelement() {

    switch (nivellactual) {

        case 1:

            TextView tvPregunta = (TextView) getActivity().findViewById(R.id.tvPregunta);
            String pregunta = ("Quin element és el Hidrògen?");
            tvPregunta.setText(pregunta);
            // int de elemento es la imagebutton
            elementcorrecte = (R.id.ibHidroJuego);

            break;

希望你能发现我的错误。

最佳答案

您不应该调用 getActivity(),因为它返回父 Activity,而不是添加 TextField 的 fragment 。
请参阅http://developer.android.com/reference/android/app/Fragment.html#getActivity%28%29

相反,您可以创建一个全局变量 TextField,并通过调用 rootView 的 findViewId() 在 onCreateView() 中实例化它。
注意:您的 TextView 位于 joc_fragment 布局中,对吧?

TextView tvPregunta;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
               Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.joc_fragment, container, false);
    ...

    tvPregunta = (TextView) rootView.findViewById(R.id.tvPregunta); // instantiate here
    berijuego=(ImageButton)rootView.findViewById(R.id.ibBeriJuego);

    ...

    return rootView;
}

public void seguentelement() {
    switch (nivellactual) {
        case 1:
            // 
            String pregunta = ("Quin element és el Hidrògen?");
            tvPregunta.setText(pregunta);
            // int de elemento es la imagebutton
            elementcorrecte = (R.id.ibHidroJuego);
            break;
    }
    ...
}

关于java - 无法在 fragment 中声明按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231263/

相关文章:

java - 如何按原样显示或打印数据库表的内容?

java - 使用 charAt(i) 从字符串创建一个整数数组会在每个索引中给出 2 位数字吗?

java - 关于图像处理

android - Android 上的形状属性

android - 如何访问每个 GridView 项的特定元素

android - Greenrobot 的 Eventbus : Two Fragments calling async tasks jobs got Eventbus confused

java - 如何让@WebMvcTest 与 OAuth 一起工作?

java - fragment 子类中的 android getMenuInflater() - 无法解析方法

android - Lateinit 属性未在 Fragment 上初始化

java - 如何重新初始化数据包的缓冲区?