Отслеживание выбранной вкладки и изменение текстового представления соответственно - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю над своим первым проектом Android, который использует макет вкладки.Я хочу отслеживать активную вкладку и изменять текстовое представление, присутствующее в панели приложений (основное действие).

Вот мое основное действие, менеджер вкладок и фрагмент

ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ

private static final String TAG = "MainActivity";

private SectionsPageAdapter mSectionsPageAdapter;

private ViewPager mViewPager;

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

    mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.container);
    setupViewPager(mViewPager);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.Tabs);
    tabLayout.setupWithViewPager(mViewPager);
    tabLayout.getTabAt(0).setIcon(R.drawable.tab_rooms_24dp);
    tabLayout.getTabAt(1).setIcon(R.drawable.tab_feed_24dp);
    tabLayout.getTabAt(2).setIcon(R.drawable.tab_profile_24dp);

    tabLayout.getTabAt(0).getIcon().setColorFilter(getResources().getColor(R.color.Accent), PorterDuff.Mode.SRC_IN);

    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tab.getIcon().setColorFilter(getResources().getColor(R.color.Accent),PorterDuff.Mode.SRC_IN);

        }

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

            tab.getIcon().clearColorFilter();

        }

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

        }
    });

}

private void setupViewPager(ViewPager viewPager){
    SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
    adapter.addFragment(new Tab1Fragment(), "");
    adapter.addFragment(new Tab2Fragment(), "");
    adapter.addFragment(new Tab3Fragment(), "");
    viewPager.setAdapter(adapter);

}

TAB MANAGER

private final List<Fragment> mFragmentList =new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();

public void addFragment(Fragment fragment, String title){
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title );
}

public SectionsPageAdapter(FragmentManager fm) {
    super(fm);
}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
    return mFragmentTitleList.get(position);
}

@Override
public Fragment getItem(int position) {
    return mFragmentList.get(position);
}

@Override
public int getCount() {
    return mFragmentList.size();
}

FRAGMENT

private static final String TAG = "Tab3Fragment";

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

    return view;
}

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

Так что я думаю, что лучшим способом было бы просто обработать его из сценария SectionsPageManager?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Итак, я все понял и решил опубликовать ответ для всех, кому это может понадобиться.

Не то, чтобы в приведенном выше ответе был указан заголовок приложения, а не TextView с панелью приложения, как указано ввопрос.

private static final String TAG = "MainActivity";

private SectionsPageAdapter mSectionsPageAdapter;
private ViewPager mViewPager;
private TextView activeTab;

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

    activeTab = (TextView)findViewById(R.id.PageTitle);

    mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.container);
    setupViewPager(mViewPager);
}

private void setupViewPager(ViewPager viewPager)
{
    SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
    adapter.addFragment(new Tab1Fragment(), "");
    adapter.addFragment(new Tab2Fragment(), "");
    adapter.addFragment(new Tab3Fragment(), "");
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

        @Override
        public void onPageSelected(int position)
        {
            switch (position){
            case 0: activeTab.setText("text");
                break;
            case 1: activeTab.setText("better text");
                break;
            case 2: activeTab.setText("best text");
                break;
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) { 

        }

    });
}
0 голосов
/ 12 февраля 2019

Используйте addOnPageChangeListener на вашем пейджере.

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

         }

    @Override
    public void onPageSelected(int position) {
        if (position == 1) {
           setTitle("Tab 1");
        } else if (position == 2)
        {
            setTitle("Tab 2");
        }
        else
        {
            setTitle("Home");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...