我试图创建一个注册页面,但是如果用户已经注册,那么我希望他们能够滑过以查看Sign In表单。FragmentPagerAdapter中具有不同内容的选项卡
具体来说,我试图按照这种问答&答:How do I use FragmentPagerAdapter to have tabs with different content?我正确复制这一切,就我所看到的,但我有与在适配器演示片段中的一部分麻烦。
在SignInActivity我有:
public class SignInActivity extends BaseActivity {
private TabLayout mTabLayout;
SignInPagerAdapter mSignInPagerAdapter;
public List<String> fragments = new Vector<String>();
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_in);
// Set up tabs and fragments
mTabLayout = (TabLayout) findViewById(R.id.tabs);
mTabLayout.addTab(mTabLayout.newTab().setText(R.string.reg));
mTabLayout.addTab(mTabLayout.newTab().setText(R.string.sign_in));
fragments.add(RegisterObjectFragment.class.getName());
fragments.add(SignInObjectFragment.class.getName());
mSignInPagerAdapter =
new SignInPagerAdapter(
getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSignInPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
}
private class SignInPagerAdapter extends FragmentPagerAdapter {
List<String> fragmentsA;
SignInPagerAdapter(FragmentManager fm) {
super(fm);
fragmentsA = fragments;
}
@Override
public Fragment getItem(int i) {
return Fragment.instantiate(getApplicationContext(), fragmentsA.get(i));
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch(position) {
case 0:
return getString(R.string.register);
case 1:
return getString(R.string.sign_in);
}
return null;
}
}
布局activity_sign_in.xml包含此:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:background="@color/colorBg"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
</android.support.v4.view.ViewPager>
</android.support.constraint.ConstraintLayout>
然后RegisterObjectFragment和SignInObjectFragment二者延伸片段,并且每个具有一个相应的布局。
这个问题似乎是与此功能在SignInActivity:
public Fragment getItem(int i) {
return Fragment.instantiate(getApplicationContext(), fragmentsA.get(i));
}
在这一点上它崩溃了,出现错误:
RegisterObjectFragment cannot be cast to android.support.v4.app.Fragment
这似乎是期待一个普通片段,但改为使用RegisterObjectFragment。我可以找到的每个示例都有这些内容 - 函数应该返回一个片段,而是返回用户生成的扩展片段。我尝试过使用我遇到的一些变体,但每次都碰到同样的问题 - 它拒绝接受除碎片以外的任何其他内容。
任何人都可以看到我要去哪里错了吗?谢谢你的帮助。