фрагмент findViewByTag всегда возвращает ноль с помощью viewpager - PullRequest
0 голосов
/ 15 января 2020

У меня есть один фрагмент (MainFragment) с кнопкой и видовой пейджер внутри с еще 2 фрагментами (HeaderFragment и ItemsFragment). Фрагменты, которые помещаются в FragmentManager, автоматически генерируют тег. Я могу извлечь этот тег и использовать его, чтобы найти HeaderFragment или Items Fragment по тегу. Но они всегда возвращают ноль.

Это мой MainFragment

public class MainFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        ((MainActivity)getActivity()).getSupportActionBar().setTitle("MAIN FRAGMENT");

        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_visitation_so_form, container, false);

       ((MainActivity)getActivity()).drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        ((MainActivity)getActivity()).toggle.setDrawerIndicatorEnabled(false);
        ((MainActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        viewPager = (ViewPager) root.findViewById(R.id.view_pager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) root.findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

        btnAdd = root.findViewById(R.id.btn_add);
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(), "android:switcher:" + R.id.view_pager + ":0", Toast.LENGTH_LONG).show(); // this shows android:switcher:2131296595:0
                Fragment fragment = getActivity().getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.view_pager + ":0");
                if (null != fragment) {
                    Log.e("success", "success");
                }
            }
        });

        return root;
    }

    private void setupViewPager(ViewPager viewPager) {
        SectionsPageAdapter adapter = new SectionsPageAdapter(getChildFragmentManager(), BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        adapter.addFragment(new VisitationSOHeaderFragment(), "Header");
        adapter.addFragment(new VisitationSOItemFragment(), "Barang");
        adapter.addBundle(bundle);
        viewPager.setAdapter(adapter);
    }
}

И это мой HeaderFragment

public class HeaderFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_visitation_so_header, container, false);

        Toast.makeText(getActivity(), this.getTag(), Toast.LENGTH_LONG).show(); // this also shows android:switcher:2131296595:0

        return root;
}

Несмотря на правильное имя тега, но я никогда не получаю до Log.e("success", "success"). Это почему? Любая помощь будет оценена.

...