我正在处理一个应用程序,需要帮助在片段类中创建3个选项卡。
我正在按照其他主题中提出的教程进行操作,并且该教程在单独的项目中完美运行:
但问题是:
在他使用的教程中
public class FragmentMain extends FragmentActivity {
但我有
public class FragmentCV extends Fragment {
我在我的主应用程序中使用"导航抽屉活动"当我点击导航抽屉上的符号时,我可以打开5个不同的片段。
现在,我想在其中一个片段中添加3个Tabs。
当我使用" FragmentActivity"就像在教程中一样,我从"导航抽屉活动"。
中得到一个错误Error:(92, 82) error: incompatible types: FragmentCV cannot be converted to Fragment
当我将其更改回" Fragment"时,教程中的其余代码无效。
继承我的代码:
MainActivity.class
(这是导航抽屉活动的类,我只粘贴我打开其他碎片的代码)
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_aboutme) {
FragmentAboutme fragmentAboutme = new FragmentAboutme();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.relativelayout_for_fragment, fragmentAboutme).commit();
} else if (id == R.id.nav_cv) {
FragmentCV fragmentCV = new FragmentCV();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.relativelayout_for_fragment, fragmentCV).commit();
} else if (id == R.id.nav_skills) {
FragmentSkills fragmentSkills = new FragmentSkills();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.relativelayout_for_fragment, fragmentSkills).commit();
} else if (id == R.id.nav_projects) {
FragmentProjects fragmentProjects = new FragmentProjects();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.relativelayout_for_fragment, fragmentProjects).commit();
} else if (id == R.id.nav_download) {
FragmentDownloads fragmentDownloads = new FragmentDownloads();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.relativelayout_for_fragment, fragmentDownloads).commit();
} else if (id == R.id.nav_website) {
FragmentAboutme fragmentAboutme = new FragmentAboutme();
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.relativelayout_for_fragment, fragmentAboutme).commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
FragmentCV.class
(这是我用MainActivity.class打开的片段)
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
public class FragmentCV extends FragmentActivity {
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_cv);
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent);
mTabHost.addTab(
mTabHost.newTabSpec("Personal Profile").setIndicator("Profile", null),
FragmentCVpage1.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("tab2").setIndicator("Tab 2", null),
Fragment_CVpage2.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("tab3").setIndicator("Tab 3", null),
FragmentCVpage3.class, null);
}
}
FragmentCVPage1.java
(此片段应通过FragmentCV.class打开)
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FragmentCVpage1 extends Fragment {
public FragmentCVpage1() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_cvpage1, container, false);
}
}
这个错误有没有简单的解决方案?
答案 0 :(得分:0)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabBackground="@android:color/white"
app:tabGravity="fill"
app:tabIndicatorColor="@android:color/black"
app:tabIndicatorHeight="2dip"
app:tabMaxWidth="0dp"
app:tabMode="fixed"
app:tabSelectedTextColor="@android:color/black"
app:tabTextColor="#80000000" />
<View
android:layout_width="match_parent"
android:layout_height="2dip"
android:background="@drawable/ic_toolbar_shadow" />
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
public class TabHolder扩展了Fragment {
private static final int NUM_OF_TABS = 3;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tab_layout, container, false);
final ViewPager viewPager = (ViewPager) view.findViewById(R.id.view_pager);
final TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
viewPager.setAdapter(new TabAdapter(getChildFragmentManager()));
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
return view;
}
private static class TabAdapter extends FragmentPagerAdapter {
TabAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FragmentOne();
case 1:
return new FragmentTwo();
case 2:
return new FragmentThree();
}
return null;
}
@Override
public int getCount() {
return NUM_OF_TABS;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "TAB 1";
case 1:
return "TAB 2";
case 2:
return "TAB 3";
}
return null;
}
}
}
FragmentOne,FragmentTwo和FragmentThree是您创建的三个片段(我假设您已经想要在每个标签下显示)
确保您的活动扩展了AppCompatActivity而非活动
在您的xml中有一个FrameLayout的Activity中,只需加载TabHolder片段,它就会在各自的标签中显示三个片段。像这样加载TabHolder
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, new TabHolder).commit();