【发布时间】:2018-01-24 10:37:28
【问题描述】:
我的应用中的组件列表如下:
- TabLayout - Tab1、Tab2、Tab3。
- 标签片段 - Tab1.xml & class、Tab2.xml & class、Tab3.xml & class。
- ViewPager 在标签上显示片段。
所以,当应用程序在我调试启动过程时启动时,它的工作方式如下:
- 它调用“Tab1.class”,
- 然后它调用“Tab2.class”,
当从“Tab1”滑动到“Tab2”时,它会调用“Tab3.class”。
当从“Tab2”滑动到“Tab3”时,它什么也不调用。
关于反向滑动:
从“Tab3”滑动到“Tab2”时,调用“Tab1.class”。
然后当从“Tab2”滑动到“Tab1”时,它什么都不调用。
问题:
那么,它为什么要这样做呢?
当应用在“tab1”上启动时,我如何才能只调用“tab1.class”?
当我从“tab1”滑动到“tab2”时,如何只调用“tab2.class”?
MainActivity.java
public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
PagerAdapter pagerAdapter = new FixedTabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
tabLayout.setupWithViewPager(viewPager);
}
class FixedTabsPagerAdapter extends FragmentPagerAdapter {
public FixedTabsPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
switch (position)
{
case 0:
return new Tab1();
case 1:
return new Tab2();
case 2:
return new Tab3();
default:
return null;
}
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position)
{
case 0:
return getString(R.string.tab1);
case 1:
return getString(R.string.tab2);
case 2:
return getString(R.string.tab3);
default:
return null;
}
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="vwc.com.newconcept.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
app:tabMode="scrollable"
app:tabGravity="center"
android:layout_gravity="top"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.v4.view.ViewPager>
</android.support.design.widget.AppBarLayout>
</android.support.v4.widget.DrawerLayout>
请告知此问题的解决方案。
【问题讨论】:
-
mViewPager.setOffscreenPageLimit(1);你试过设置这个吗? -
define it calls 'TabX.class' ...如果这意味着创建片段类实例,那么请想一想:如何在滑动时看到两个片段而不创建他们?
-
@Dipalis。不,我没有。我应该把它放在哪里? viewPager.setAdapter(pagerAdapter);??
-
ViewPager.setOffscreenPageLimit(1); - Obviously, it doesn't change anything ... ... also it is 1 by default ... Million Monkeys Programming Style 的好例子
-
@Dipalis。谢谢,但它不起作用。
标签: android android-fragments android-viewpager android-tablayout android-studio-3.0