Проведите вкладки в динамическом фрагменте - PullRequest
0 голосов
/ 26 ноября 2018

Я хотел реализовать вкладки смахивания в динамически генерируемом фрагменте (у него нет файла макета), и я не знаю как.Я пробовал что-то, достигая некоторых «результатов», под этим я подразумеваю, что это показывает мне макет вкладки, но он не «загружает» фрагменты.Я подозреваю, что проблема с пейджером представления, в объявлении. Вот код фрагмента:

public class fg_tabs extends Fragment {

LinearLayout root;

TabLayout tab_layout;
ViewPager view_pager;
PagerAdapter pager_adaper;

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


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

    root = new LinearLayout(getActivity());
    root.setOrientation(LinearLayout.VERTICAL);

    tab_layout = new TabLayout(getActivity());
    view_pager = new ViewPager(getActivity());
    view_pager.setCurrentItem(2);

    tab_layout.addTab(tab_layout.newTab().setText("Penguins"));
    tab_layout.addTab(tab_layout.newTab().setText("North Wind"));
    tab_layout.addTab(tab_layout.newTab().setText("Dr Octavious Brine"));


    tab_layout.setTabGravity(Gravity.FILL);
    pager_adaper = new PagerAdapter(getFragmentManager(),tab_layout.getTabCount());

    view_pager.setAdapter(pager_adaper);
    view_pager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tab_layout));

    tab_layout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            view_pager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

    root.addView(tab_layout);
    return root;
}

}

, и вы, возможно, захотите взглянуть на то, как я звонюэтот фрагмент, посмотрите, если что-то не так:

    fg_tabs tabs = new fg_tabs();
    FragmentManager fm= getSupportFragmentManager();
    fm.beginTransaction().replace(R.id.layout_frame,tabs).commit();

класс адаптера пейджера:

открытый класс PagerAdapter extends FragmentStatePagerAdapter {int n;

public PagerAdapter(FragmentManager fm,int n) {
    super(fm);
    this.n=n;
}


@Override
public Fragment getItem(int position) {
    if(position == 0)
        return new Penguins();

    if(position == 1)
        return new NorthWind();

    if(position == 2)
        return new DrOctaviousBrine();

    return null;
}

@Override
public int getCount() {
    return n;
}

}

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Я нашел ответ на вопрос, проблема не в том, чтобы установить параметры для окна просмотра, не дать ему идентификатор и не добавить его в макет.Для тех, кто борется с одним и тем же вопросом, просто возьмите обычный код табуляции (https://www.youtube.com/watch?v=zcnT-3F-9JA)) и имейте в виду, что вы используете динамический фрагмент, поэтому вы не можете объявить xml.

import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

public class fg_tabs extends Fragment {

    LinearLayout root;
    TabLayout tab_layout;
    ViewPager view_pager;
    PagerAdapter pager_adapter;

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


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

        root = new LinearLayout(getActivity());

        root.setOrientation(LinearLayout.VERTICAL);
        root.setBackgroundColor(Color.parseColor("#42f4e8"));

        tab_layout = new TabLayout(getActivity());

        tab_layout.addTab(tab_layout.newTab().setText("penguins"));
        tab_layout.addTab(tab_layout.newTab().setText("north wind"));
        tab_layout.addTab(tab_layout.newTab().setText("octavious brine"));
        root.addView(tab_layout);

        tab_layout.setTabGravity(Gravity.FILL);

        view_pager = new ViewPager(getActivity());
        view_pager.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.FILL_PARENT));
        view_pager.setId(View.generateViewId());
        root.addView(view_pager);

        pager_adapter = new PagerAdapter(getChildFragmentManager(),tab_layout.getTabCount());

        view_pager.setAdapter(pager_adapter);
        view_pager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tab_layout));

        tab_layout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                view_pager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
        return root;
    }
}
0 голосов
/ 26 ноября 2018

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

ViewGroup.LayoutParams params = LinearLayout.LayoutParams(
    ViewGroup.LayoutParams.MATCH_PARENT,
    ViewGroup.LayoutParams.MATCH_PARENT)
root.addView(view_pager, params);
return root;
...