Textview с глобальной переменной - PullRequest
0 голосов
/ 12 февраля 2020

Я просто вызвал глобальную переменную для объекта Textview и распечатал ее, но получил следующую ошибку

Как мне нормально запустить следующий код?

pstextread_buf - глобальная переменная.


logcat

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.sentence_app, PID: 26177

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

    at com.example.sentence_app.senten_check_example_mean.onCreateView(senten_check_example_mean.java:40)

// ошибка код

public class senten_check_example_mean extends Fragment {

    public static senten_check_example_mean newInstance(){

        return new senten_check_example_mean();

    }

    public senten_check_example_mean() {
        // Required empty public constructor
    }

    Button return_sentence_check_button;

    TextView textView_name ;
    TextView textView_mean ;
    TextView textView_example ;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        textView_name =(TextView) ((MainActivity)getActivity()).findViewById(R.id.text_read_name);
        textView_mean =(TextView) ((MainActivity)getActivity()).findViewById(R.id.text_read_mean);
        textView_example =(TextView) ((MainActivity)getActivity()).findViewById(R.id.text_read_example);

        textView_name.setText(((MyApplication) getActivity().getApplicationContext()).textread_buf.getSentence_name());
        textView_mean.setText(((MyApplication) getActivity().getApplicationContext()).textread_buf.getSentence_example());
        textView_example.setText(((MyApplication) getActivity().getApplicationContext()).textread_buf.getSentence_mean());

        return inflater.inflate(R.layout.fragment_senten_check_example_mean, container, false);
    }

}

// textread.class

package com.example.sentence_app;

import java.util.LinkedList;

import java.util.Queue;

import java.util.Stack;

public class textread {

    String sentence_name;
    String sentence_example;
    Queue<String> sentence_mean;

    textread(){

    }

    textread(String temp){
        String []cs = temp.split("\\|");
        this.setSentence_name(cs[0]);
        this.setSentence_mean(cs[1]);
        this.setSentence_example(cs[2]);
    }

    public String getSentence_example() {
        return sentence_example;
    }

    public String getSentence_mean() {
        return sentence_mean.peek();
    }

    public String getSentence_name() {
        return sentence_name;
    }


}

Ответы [ 3 ]

1 голос
/ 12 февраля 2020

Этот вопрос в конечном итоге будет закрыт как дубликат для исключения нулевого указателя. Тем не менее, если эти текстовые представления находятся внутри макета вашего фрагмента, как обычно, попробуйте рефакторинг вашего фрагмента onCreateView, как показано ниже:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_senten_check_example_mean, container, false);

        textView_name =(TextView) view.findViewById(R.id.text_read_name);
        textView_mean =(TextView) view.findViewById(R.id.text_read_mean);
        textView_example =(TextView) view.findViewById(R.id.text_read_example);

        textView_name.setText(((MyApplication) getActivity().getApplicationContext()).textread_buf.getSentence_name());
        textView_mean.setText(((MyApplication) getActivity().getApplicationContext()).textread_buf.getSentence_example());
        textView_example.setText(((MyApplication) getActivity().getApplicationContext()).textread_buf.getSentence_mean());

        return view;
    }

Сначала необходимо накачать вид макета, а затем найти его в этом раздутом макете. Нахождение этих представлений внутри деятельности ничего не даст.

0 голосов
/ 12 февраля 2020

Во-первых, переместите findViewbyId () в onViewCreated

Во-вторых, он не работает, потому что вы используете getActivity () (получить родительское действие), чтобы найти представление во фрагменте xml. Используйте getView (). FindViewById () или используйте вместо этого inflater

0 голосов
/ 12 февраля 2020

Сначала вы меняете textview, инициализирующий onCreateView, на метод onViewCreated, потому что это нехорошо, и некоторое время View не раздувается, поэтому инициализируйте вашу переменную в методе onViewCreated, а затем перекомпилируйте код.

...