Android 将选项卡添加到一个片段
我正在尝试在我的应用程序中的一个片段中添加标签(该应用程序有几个片段)。我在兜圈子,想让这件事起作用。我从stackoverflow的答案中找到了一些建议,该答案被发布到了某人的问题中,但这会使我的应用程序崩溃 片段代码 公共类salesPartsHolderFragment扩展了片段{Android 将选项卡添加到一个片段,android,android-fragments,tabs,Android,Android Fragments,Tabs,我正在尝试在我的应用程序中的一个片段中添加标签(该应用程序有几个片段)。我在兜圈子,想让这件事起作用。我从stackoverflow的答案中找到了一些建议,该答案被发布到了某人的问题中,但这会使我的应用程序崩溃 片段代码 公共类salesPartsHolderFragment扩展了片段{ public salesPartsHolderFragment() { // Required empty public constructor } @Override public View o
public salesPartsHolderFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View theView = inflater.inflate(R.layout.fragment_sales_parts_holder, container, false);
TabHost tabs=(TabHost)getActivity().findViewById(R.id.tabhost);
tabs.setup();
TabHost.TabSpec spec=tabs.newTabSpec("tag1");
spec.setContent(R.id.tab1);//here you define which tab you want to setup
spec.setIndicator("So Close");//here you choose the text showed in the tab
tabs.addTab(spec);
spec=tabs.newTabSpec("tag2");
spec.setContent(R.id.tab2);
spec.setIndicator("Contacts");
tabs.addTab(spec);
return theView;
}
}
XML代码
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.alcontrol.atmis.anticimex.activities.salesPartsHolderFragment">
<TabHost
android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/setting" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="46dp"
/>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/tab1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/white"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
</FrameLayout>
</LinearLayout>
替换
TabHost tabs = (TabHost)getActivity().findViewById(R.id.tabhost);
与
试试这个。这会奏效的
调用
getActivity.findViewById()
在onCreateView()
中不起作用,因为片段的视图
尚未由onCreateView()
创建此项目的帮助。Google建议使用它而不是TabHost。您必须创建一个选项卡活动,在该活动中您将添加片段。我希望下面的代码能够帮助您:
公共类TabActivity扩展了FragmentActivity{
private static TabHost mTabHost;
private TabSpec mTabSpec;
private final String TAG_First = "First";
private final String TAG_Second = "Second";
private final String TAG_Third = "Third";
private int mCurrentTab = 0;
private View mDecorView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab);
mTabHost = (TabHost) findViewById(R.id.tabhost_lesson);
mTabHost.setOnTabChangedListener(mTabChangeListener);
mTabHost.setup();
setupTabs();
}
private void setupTabs() {
/*
* Setup new tab
*/
mTabSpec = mTabHost.newTabSpec(TAG_First);
mTabHost.setCurrentTab(mCurrentTab);
mTabSpec.setContent(new TabContentFactory() {
@Override
public View createTabContent(String tag) {
return findViewById(android.R.id.tabcontent);
}
});
mTabSpec.setIndicator(createTabContent(TAG_First, 14));
mTabHost.addTab(mTabSpec);
/*
* Setup New Tab
*/
mTabSpec = mTabHost.newTabSpec(TAG_Second);
mTabSpec.setContent(new TabContentFactory() {
@Override
public View createTabContent(String tag) {
return findViewById(android.R.id.tabcontent);
}
});
mTabSpec.setIndicator(createTabContent(TAG_Second, 14));
mTabHost.addTab(mTabSpec);
mTabHost.getTabWidget().setDividerDrawable(null);
/*
* Setup New Tab
*/
mTabSpec = mTabHost.newTabSpec(TAG_Third);
mTabSpec.setContent(new TabContentFactory() {
@Override
public View createTabContent(String tag) {
return findViewById(android.R.id.tabcontent);
}
});
mTabSpec.setIndicator(createTabContent(TAG_Third, 14));
mTabHost.addTab(mTabSpec);
}
/**
* Method to Customize Tabs
*
* @param String
* TabID
* @param Drawable
* drawable
* @param int TabTextSize
* @return
*/
public View createTabContent(String mTabLbl, int mTxtSize) {
View mTabView = LayoutInflater.from(TabActivity.this).inflate(
R.layout.tabs_background, null);
TextView mTabText = (TextView) mTabView.findViewById(R.id.tabsText);
// mTabText.setBackgroundDrawable(mTabDraw);
mTabText.setText(mTabLbl);
return mTabView;
}
public static void SetCurrentTab(int CurrentTab) {
mTabHost.setCurrentTab(CurrentTab);
}
TabHost.OnTabChangeListener mTabChangeListener = new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
if (tabId.equals(TAG_First)) {
mCurrentTab = 0;
FirstFrag fFragment = new FirstFrag();
addTabFragments(tabId, fFragment);
} else if (tabId.equals(TAG_Second)) {
mCurrentTab = 1;
SecondFrag sFragment = new SecondFrag();
addTabFragments(tabId, sFragment);
} else if (tabId.equals(TAG_Third)) {
mCurrentTab = 2;
ThirdFrag tFragment = new ThirdFrag();
addTabFragments(tabId, tFragment);
}
}
};
/**
* Method to add Fragment When Switching Between Tabs
*
* @param String
* Tag
* @param Fragment
* TabFragment
*/
public void addTabFragments(String tag, Fragment mTabFrag) {
FragmentManager mFragmentManager = getSupportFragmentManager();
FragmentTransaction mFragmentTransaction = mFragmentManager
.beginTransaction();
mFragmentTransaction.replace(R.id.frame, mTabFrag);
mFragmentTransaction.commit();
}
}阅读有关使用FragmentTabHost的内容谢谢您的回复,我有一个维护活动,将所有具有工作流程的片段FragA传递到FragF,其中FragD是具有选项卡的片段。你是说我必须离开MainActivity进入TabActivity?你是想在一个片段中添加所有选项卡吗?是的,一个片段需要显示两个选项卡,然后在该片段中加载内容。我也在片段中测试了这段代码,效果很好。我有一个主要的活动叫做片段“tabFragment”。此选项卡片段有3个选项卡…您可以使用此链接中的我的代码。请发布LogCatHanks,我现在已添加了LogCatMainActivity的第244行中的logcatwhat??请同时提供您的loadSalesPartsFragment()
方法代码我很抱歉,那里有一些多余的代码,我已经删除了,现在可以工作了:-)。非常高兴,再次感谢您的大力帮助,并为我节省了更多的黑客时间。
TabHost tabs = (TabHost)theView.findViewById(R.id.tabhost);
private static TabHost mTabHost;
private TabSpec mTabSpec;
private final String TAG_First = "First";
private final String TAG_Second = "Second";
private final String TAG_Third = "Third";
private int mCurrentTab = 0;
private View mDecorView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab);
mTabHost = (TabHost) findViewById(R.id.tabhost_lesson);
mTabHost.setOnTabChangedListener(mTabChangeListener);
mTabHost.setup();
setupTabs();
}
private void setupTabs() {
/*
* Setup new tab
*/
mTabSpec = mTabHost.newTabSpec(TAG_First);
mTabHost.setCurrentTab(mCurrentTab);
mTabSpec.setContent(new TabContentFactory() {
@Override
public View createTabContent(String tag) {
return findViewById(android.R.id.tabcontent);
}
});
mTabSpec.setIndicator(createTabContent(TAG_First, 14));
mTabHost.addTab(mTabSpec);
/*
* Setup New Tab
*/
mTabSpec = mTabHost.newTabSpec(TAG_Second);
mTabSpec.setContent(new TabContentFactory() {
@Override
public View createTabContent(String tag) {
return findViewById(android.R.id.tabcontent);
}
});
mTabSpec.setIndicator(createTabContent(TAG_Second, 14));
mTabHost.addTab(mTabSpec);
mTabHost.getTabWidget().setDividerDrawable(null);
/*
* Setup New Tab
*/
mTabSpec = mTabHost.newTabSpec(TAG_Third);
mTabSpec.setContent(new TabContentFactory() {
@Override
public View createTabContent(String tag) {
return findViewById(android.R.id.tabcontent);
}
});
mTabSpec.setIndicator(createTabContent(TAG_Third, 14));
mTabHost.addTab(mTabSpec);
}
/**
* Method to Customize Tabs
*
* @param String
* TabID
* @param Drawable
* drawable
* @param int TabTextSize
* @return
*/
public View createTabContent(String mTabLbl, int mTxtSize) {
View mTabView = LayoutInflater.from(TabActivity.this).inflate(
R.layout.tabs_background, null);
TextView mTabText = (TextView) mTabView.findViewById(R.id.tabsText);
// mTabText.setBackgroundDrawable(mTabDraw);
mTabText.setText(mTabLbl);
return mTabView;
}
public static void SetCurrentTab(int CurrentTab) {
mTabHost.setCurrentTab(CurrentTab);
}
TabHost.OnTabChangeListener mTabChangeListener = new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
if (tabId.equals(TAG_First)) {
mCurrentTab = 0;
FirstFrag fFragment = new FirstFrag();
addTabFragments(tabId, fFragment);
} else if (tabId.equals(TAG_Second)) {
mCurrentTab = 1;
SecondFrag sFragment = new SecondFrag();
addTabFragments(tabId, sFragment);
} else if (tabId.equals(TAG_Third)) {
mCurrentTab = 2;
ThirdFrag tFragment = new ThirdFrag();
addTabFragments(tabId, tFragment);
}
}
};
/**
* Method to add Fragment When Switching Between Tabs
*
* @param String
* Tag
* @param Fragment
* TabFragment
*/
public void addTabFragments(String tag, Fragment mTabFrag) {
FragmentManager mFragmentManager = getSupportFragmentManager();
FragmentTransaction mFragmentTransaction = mFragmentManager
.beginTransaction();
mFragmentTransaction.replace(R.id.frame, mTabFrag);
mFragmentTransaction.commit();
}