Есть ли способ после создания вида фрагментов? Как изменить расположение вкладок после создания фрагментов - PullRequest
0 голосов
/ 21 октября 2018

Мне нужно вызвать метод, в котором я анализирую объекты JSON и устанавливаю значения, которые я устанавливаю в TextFields и значениях кнопок, я создал фрагменты, но после создания фрагментов, как я буду изменять значения текстового поля

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        TextView textView = (TextView) rootView.findViewById(R.id.section_label);
        textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));

        //Switch to different layout accordingly
        switch (getArguments().getInt(ARG_SECTION_NUMBER))
        {
            case 1: {
                rootView = inflater.inflate(R.layout.fragment_main, container, false);
                break;
            }
            case 2: {
                rootView = inflater.inflate(R.layout.fragment_receipt, container, false);
                break;
            }

            case 3: {
                rootView = inflater.inflate(R.layout.fragment_totals, container, false);
                break;
            }
            case 4: {
                rootView = inflater.inflate(R.layout.fragment_keyboard, container, false);
                break;
            }
            case 5: {
                rootView = inflater.inflate(R.layout.fragment_keylock, container, false);
                break;
            }

        }
        return rootView;
    }
}

Я пытался вызвать метод в onStart, но метод onStart вызывается первым до onCreateView, и, следовательно, я получаю исключение нулевого указателя при назначении значения:

@Override
  public void onStart() {
    super.onStart();
    parseJsonResponse(response_message);
  }

Вметод parseJsonResponse (), я устанавливаю значение

String UIFooter = ResponseHeaderObject.getString("FOOTER");
//Set Header Display
headerTextView =(TextView) findViewById(R.id.headerTextView);
headerTextView.setText(UIHeader);

вот ошибка из logcat:

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.mpos.kits.smartpos.PosMainActivity.parseJsonResponse(PosMainActivity.java:366)

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Да, этот метод существует: onViewCreated.однако, если вы хотите назначить текст TextView вне метода, для которого он был создан, вы должны объявить TextView как свойство члена (вне любого метода), чтобы разрешить его использование всеми методами класса,В противном случае внутри фрагмента будет сложно манипулировать им.

Причина: java.lang.NullPointerException: Попытка вызвать виртуальный метод 'void android.widget.TextView.setText (java.lang.CharSequence)' для ссылки на пустой объект в com.mpos.kits.smartpos.PosMainActivity.parseJsonResponse (PosMainActivity.java:366)

Вы получаете эту ошибку, потому что это headerTextView =(TextView) findViewById(R.id.headerTextView); возвращает null в вашем фрагменте, если оно не ссылается на корневой вид, как вonCreateView метод.вот так (TextView) rootView.findViewById(R.id.section_label);

Если вы хотите переопределить метод onViewCreated, сделайте это так:

@Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

        super.onViewCreated(view, savedInstanceState);

        //your code
    }
0 голосов
/ 21 октября 2018

Фрагменты имеют функцию с именем: onViewCreated, которая вызывается после создания вашего представления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...