Как переработать фрагмент? - PullRequest
0 голосов
/ 14 января 2020

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    v = inflater.inflate(R.layout.unu_fragment, container, false);

    mRecycler = (RecyclerView) v.findViewById(R.id.fragment_unu_recycler);
    layoutManager = new LinearLayoutManager(getActivity());
    mRecycler.setLayoutManager(layoutManager);


    mDatabase = FirebaseDatabase.getInstance();

        mRef = mDatabase.getReference(restName).child("Meniu").child(CategoryAdapter.category).child(*SUBCATEGORY*);
...

У меня есть RecyclerView, который следует по этому пути и заполняет фрагмент с некоторыми элементами, но мне нужно заполнить каждую вкладку, которая у меня есть, и каждая вкладка имеет свой путь mRef, как вы можете видеть на этом .child(*SUBCATEGORY*).

И вот как я генерировал вкладки:

databaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot child: dataSnapshot.getChildren()){
                String key = child.getKey();
                adapter.AddFragment(new FragmentUnu(),key);
                viewPager.setAdapter(adapter);
                tabLayout.setupWithViewPager(viewPager);
            }
        }
                @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

Как мне поступить в этой ситуации?

1 Ответ

1 голос
/ 14 января 2020

Ваш вопрос не очень понятен, но из того, что я понял, вы хотите иметь разные ссылочные пути для разных вкладок, используя один и тот же класс фрагментов для каждого дочернего фрагмента в хосте ViewPager.

, если это в вашем случае:

создайте метод get c publi в классе, который имеет виджет ViewPager в макете :

        //will return the current position of the Tab
         public int getViewPagerCurrentPosition(){
           return viewpager.getCurrentItem()
        }

В вашем Фрагменте РЕБЕНОК Класс (где у вас есть свой рециклер):

Если класс хостинга активность :

int position = (CAST:NAME_OF_THE_ACTIVITY)getActivity().getViewPagerCurrentPosition()

Если класс хостинга представляет собой фрагмент :

int position = (CAST:NAME_OF_THE_FRAGMENT)  getParentFragment().getViewPagerCurrentPosition()

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

Имейте в виду, что позиция начинается с 0

, если (position == 0) {...} else ...

или переключатель (позиция)

ОБНОВЛЕНИЕ (еще возможно Решение) (Я полагаю, вам нужен childKey внутри фрагмента)

1-INSIDE YOUR FRAGMENT создать этот фабричный метод (позволяет передать аргумент фрагменту):

private static final String ARG_CHILDKEY= "child_key"//or any string you want;
public static FragmentUnu newInstance(String key) {
        Bundle args = new Bundle();
        args.putString(ARG_CHILDKEY, key);

        FragmentUnu fragment = new FragmentUnu();
        fragment.setArguments(args);
        return fragment;
    }

2-Обновить следующее:

databaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot child: dataSnapshot.getChildren()){
                String key = child.getKey();
                adapter.AddFragment(FragmentUnu.newInstance(key),key);
                viewPager.setAdapter(adapter);
                tabLayout.setupWithViewPager(viewPager);
            }
        }
                @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

3-назад к вашему FragmentUnu:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String key=  getArguments().getString(ARG_CHILDKEY);
}

Теперь у вас есть ключ в вашем фрагменте

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