Android viewpager中的片段工作不正常
我在一个viewpager中有3个选项卡,在我使用改装调用服务器的所有3个片段中,但当我启动活动时,会调用前2个片段,并从两个网络调用,当我转到下一个选项卡位置时,不会显示任何内容,位置变为2 问题是,当我进入“活动视图”时,寻呼机已初始化,寻呼机适配器返回位置0和1处的两个片段,并将两个片段充气,以便从这两个位置调用网络,但当我将选项卡移动到下一个位置时变为2…它应为1 适配器类:Android viewpager中的片段工作不正常,android,android-fragments,Android,Android Fragments,我在一个viewpager中有3个选项卡,在我使用改装调用服务器的所有3个片段中,但当我启动活动时,会调用前2个片段,并从两个网络调用,当我转到下一个选项卡位置时,不会显示任何内容,位置变为2 问题是,当我进入“活动视图”时,寻呼机已初始化,寻呼机适配器返回位置0和1处的两个片段,并将两个片段充气,以便从这两个位置调用网络,但当我将选项卡移动到下一个位置时变为2…它应为1 适配器类: public class PagerAdapter extends FragmentStatePagerAdap
public class PagerAdapter extends FragmentStatePagerAdapter {
private int mNumTabs;
public PagerAdapter(FragmentManager fm, int numTabs) {
super(fm);
this.mNumTabs= numTabs;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
Fragment1 tab0 = new Fragment1();
return tab0;
case 1:
Fragment2 tab1 = new Fragment2();
return tab1;
case 2:
Fragment3 tab2 = new Fragment3();
return tab2;
default:
return null;
}
}
@Override
public int getCount() {
return mNumTabs;
}
}
活动类别:
public class UserProfileScreen extends AppCompatActivity {
private ViewPager viewPager;
private TabLayout tabLayout;
private Context context;
private PagerAdapter PagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile_screen);
context = this;
initViews();
tabLayout.addTab(tabLayout.newTab().setText("About"));
tabLayout.addTab(tabLayout.newTab().setText("Session"));
tabLayout.addTab(tabLayout.newTab().setText("Subjects"));
pagerAdapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(profilePagerAdapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
//Toast.makeText(context, "Unselected",Toast.LENGTH_LONG).show();
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
//Toast.makeText(context, "Reselected",Toast.LENGTH_LONG).show();
}
});
}
private void initViews(){
myToolbar = (Toolbar) findViewById(R.id.toolbar);
tabLayout = (TabLayout) findViewById(R.id.profile_tab_layout);
setSupportActionBar(myToolbar);
viewPager = (ViewPager) findViewById(R.id.profile_viewPager);
}
}
片段1:
public class Fragment1 extends Fragment {
private RecyclerView sessions_recycler_view;
private SessionsAdapter sessionsAdapter;
private SessionProfileFragmentPresenter presenter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sessionsAdapter = new SessionsAdapter(getContext(),this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_profile,container,false);
sessions_recycler_view = (RecyclerView) view.findViewById(R.id.sessions_list);
sessions_recycler_view.setAdapter(sessionsAdapter);
//Server Call to get List<HashMap<String,Object>> data
setDataToAdapter(data);
return view;
}
private void setDataToAdapter(List<HashMap<String, Object>> sessions) {
sessionsAdapter.setData(sessions);
}
}
公共类Fragment1扩展了Fragment{
私人回收站查看会话\u回收站\u查看;
私有会话适配器会话适配器;
私人会话档案碎片演示者演示者;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
SessionAdapter=新的SessionAdapter(getContext(),this);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(右布局。碎片剖面,容器,假);
sessions\u recycler\u view=(RecyclerView)view.findViewById(R.id.sessions\u列表);
sessions\u recycler\u view.setAdapter(sessionsAdapter);
//服务器调用以获取列表数据
将数据设置为适配器(数据);
返回视图;
}
私有void setDataToAdapter(列出会话){
sessionAdapter.setData(会话);
}
}
Fragment2也与Fragment1相同。我支持Pramod Garg的答案 viewPager的默认OffscreenPageLimit为1,因此下面的代码可能对您有用。我刚刚添加了行viewpager.setOffscreenPageLimit(2)
发布您使用viewpager尝试的内容。setOffscreenPageLimit(3)onCreate activity 3片段将被加载,而不是2。我尝试过,在本文中,我在片段3中获得数据,但在片段2中没有。因此,问题可能在于setDataToAdapter。在片段3中,适配器被调用,但在片段2中没有调用。有关该片段的更多信息,请编辑文章
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile_screen);
context = this;
initViews();
tabLayout.addTab(tabLayout.newTab().setText("About"));
tabLayout.addTab(tabLayout.newTab().setText("Session"));
tabLayout.addTab(tabLayout.newTab().setText("Subjects"));
pagerAdapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(profilePagerAdapter);
viewpager.setOffscreenPageLimit(2)
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
//Toast.makeText(context, "Unselected",Toast.LENGTH_LONG).show();
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
//Toast.makeText(context, "Reselected",Toast.LENGTH_LONG).show();
}
});
}