Я не могу получить доступ к текстовому представлению внутри моего фрагмента макета из моей деятельности, используя фрагмент - PullRequest
1 голос
/ 25 июня 2019

Я перепробовал все методы, упомянутые в следующей теме Как получить доступ к дочерним представлениям фрагмента внутри родительской активности фрагмента? , но ни один из них, похоже, не работает для меня. Только после полутора часов я задаю этот вопрос.

Мой КатегорииФрагмент

    public class CategoriesFragment extends Fragment {

    private TextView textView;

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_categories,container,false);
            textView = view.findViewById(R.id.cat_text);
            Log.i("Tag",textView.getText().toString());
            return view;
        }

        public TextView getTextView(){
            return textView;
        }

         .

         .

         .

 }

Я открываю фрагмент категории, когда пользователь нажимает на нижнюю панель навигации, состоящую из вкладки категорий.

Мой Домашний экран Активность

public class HomeScreen extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener, CategoriesFragment.OnFragmentInteractionListener{

 private BottomNavigationView bottomNavigationView;
 private CategoriesFragment categoriesFragment;
 private FrameLayout bottomFrameLayout;
 private TextView textView;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_screen);

        bottomNavigationView = findViewById(R.id.bottom_nav_view);
        bottomFrameLayout = findViewById(R.id.bottom_nav_frame);
        categoriesFragment = new CategoriesFragment();
        bottomNavigationView.setOnNavigationItemSelectedListener(this);
}

@Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()){
             case R.id.bottom_nav_categories :
                getSupportFragmentManager().beginTransaction().replace(R.id.bottom_nav_frame,categoriesFragment).addToBackStack(null).commit();
                textView = categoriesFragment.getTextView();
                textView.setText("DONE"); 
        }
        return true;
}

Это вызывает исключение нулевого указателя, так как он не может получить текстовое представление. Любая помощь / руководство будет высоко ценится:)

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Зачем получать просмотр текста и задавать текст из действия, когда вы можете передать строку в качестве параметра общедоступному методу фрагмента для изменения текста?

0 голосов
/ 25 июня 2019

Функция commit() не работает синхронно, поэтому ваш фрагмент не будет готов сразу после вызова.

Взято из документации.

Планирует коммитэтой транзакции.Фиксация происходит не сразу;это будет запланировано как работа над основным потоком, которая будет сделана в следующий раз, когда поток будет готов.


Используйте commitNow(), поскольку это работает синхронно, и фрагмент полностью переводится в состояние lifycycle своего хоста.

См. https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#commitnow для получения дополнительной информации

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