我試圖創建一個註冊頁面,但是如果用戶已經註冊,那麼我希望他們能夠滑過以查看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。我可以找到的每個示例都有這些內容 - 函數應該返回一個片段,而是返回用戶生成的擴展片段。我嘗試過使用我遇到的一些變體,但每次都碰到同樣的問題 - 它拒絕接受除碎片以外的任何其他內容。
任何人都可以看到我要去哪裏錯了嗎?謝謝你的幫助。