<p>像我这个有强迫症的人来说,自从TabActivity抛弃之后,再使用看到一个个警告和一条条划着的横线,心里很不舒服,现在终于下定决心用Fragment来替换掉TabActivity了!我的研究成果如下:</p><p><img src="/up_pic/201810/301050489725.jpg" title="301050489725.jpg" alt="1.jpg"/></p><p>首先是MainActivity,它需要继承FragmentActivity(这里是指:版本是3.0之前的继承FragmentActivity,3.0版本之后的继承Activity就可以),对于FragmentActivity的声明周期我就不过多介绍了,和Activity差不了多少,自己也能弄明白!下边是MainActivity的代码:</p><pre class="brush:java;toolbar:false">packagenet.loonggg.fragment;
importandroid.os.Bundle;
importandroid.support.v4.app.Fragment;
importandroid.support.v4.app.FragmentActivity;
importandroid.support.v4.app.FragmentManager;
importandroid.support.v4.app.FragmentTransaction;
importandroid.view.Window;
importandroid.widget.RadioButton;
importandroid.widget.RadioGroup;
importandroid.widget.RadioGroup.OnCheckedChangeListener;
publicclassMainActivityextendsFragmentActivity{
privateFragment[]mFragments;
privateRadioGroupbottomRg;
privateFragmentManagerfragmentManager;
privateFragmentTransactionfragmentTransaction;
privateRadioButtonrbOne,rbTwo,rbThree,rbFour;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mFragments=newFragment[3];
fragmentManager=getSupportFragmentManager();
mFragments[0]=fragmentManager.findFragmentById(R.id.fragement_main);
mFragments[1]=fragmentManager.findFragmentById(R.id.fragement_search);
mFragments[2]=fragmentManager
.findFragmentById(R.id.fragement_setting);
fragmentTransaction=fragmentManager.beginTransaction()
.hide(mFragments[0]).hide(mFragments[1]).hide(mFragments[2]);
fragmentTransaction.show(mFragments[0]).commit();
setFragmentIndicator();
}
privatevoidsetFragmentIndicator(){
bottomRg=(RadioGroup)findViewById(R.id.bottomRg);
rbOne=(RadioButton)findViewById(R.id.rbOne);
rbTwo=(RadioButton)findViewById(R.id.rbTwo);
rbThree=(RadioButton)findViewById(R.id.rbThree);
bottomRg.setOnCheckedChangeListener(newOnCheckedChangeListener(){
@Override
publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){
fragmentTransaction=fragmentManager.beginTransaction()
.hide(mFragments[0]).hide(mFragments[1])
.hide(mFragments[2]);
switch(checkedId){
caseR.id.rbOne:
fragmentTransaction.show(mFragments[0]).commit();
break;
caseR.id.rbTwo:
fragmentTransaction.show(mFragments[1]).commit();
break;
caseR.id.rbThree:
fragmentTransaction.show(mFragments[2]).commit();
break;
default:
break;
}
}
});
}
}</pre><p>下边对应的是MainActivity的布局文件activity_main.xml:</p><pre class="brush:xml;toolbar:false"><LinearLayoutxmlns: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"
android:background="@drawable/activity_bg"
android:orientation="vertical">
<!--上边主页面-->
<fragment
android:id="@+id/fragement_main"
android:name="net.loonggg.fragment.FragmentMain"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="10"/>
<fragment
android:id="@+id/fragement_search"
android:name="net.loonggg.fragment.FragmentSearch"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="10"/>
<fragment
android:id="@+id/fragement_setting"
android:name="net.loonggg.fragment.FragmentSetting"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="10"/>
<!--底部菜单页面-->
<RadioGroup
android:id="@+id/bottomRg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:background="@drawable/tab_footer_bg"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rbOne"
style="@style/rg_btn_style"
android:checked="true"
android:drawableTop="@drawable/rb_one_btn_selector"
android:text="首页"/>
<RadioButton
android:id="@+id/rbTwo"
style="@style/rg_btn_style"
android:drawableTop="@drawable/rb_two_btn_selector"
android:text="搜索"/>
<RadioButton
android:id="@+id/rbThree"
style="@style/rg_btn_style"
android:drawableTop="@drawable/rb_three_btn_selector"
android:text="设置"/>
</RadioGroup>
</LinearLayout></pre><p>这里为了大家方便,展示一下项目的布局图:</p><p><img src="/up_pic/201810/301050576794.jpg" title="301050576794.jpg" alt="2.jpg"/></p><p>再下边是要设计的首页界面,它是继承的Fragment,具体看代码:</p><pre class="brush:java;toolbar:false">packagenet.loonggg.fragment;
importandroid.os.Bundle;
importandroid.support.v4.app.Fragment;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.TextView;
publicclassFragmentMainextendsFragment{
privateTextViewtv;
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
returninflater.inflate(R.layout.fragment_main,container,false);
}
@Override
publicvoidonActivityCreated(BundlesavedInstanceState){
super.onActivityCreated(savedInstanceState);
tv=(TextView)getView().findViewById(R.id.titleTv);
tv.setText("首页");
}
}</pre><p>接着是对应的布局文件代码fragment_main.xml:</p><pre class="brush:xml;toolbar:false"><?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/one_title"
layout="@layout/title_bar"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="这是首页"
android:textColor="#000000"/>
</LinearLayout></pre><p>再接着是:搜索界面的代码:</p><pre class="brush:java;toolbar:false">packagenet.loonggg.fragment;
importandroid.os.Bundle;
importandroid.support.v4.app.Fragment;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.TextView;
publicclassFragmentSearchextendsFragment{
privateTextViewtv;
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
returninflater.inflate(R.layout.fragment_search,container,false);
}
@Override
publicvoidonActivityCreated(BundlesavedInstanceState){
super.onActivityCreated(savedInstanceState);
tv=(TextView)getView().findViewById(R.id.titleTv);
tv.setText("搜索");
}
@Override
publicvoidonPause(){
super.onPause();
}
}</pre><p>如上是对应的布局文件的代码fragment_search.xml:</p><pre class="brush:xml;toolbar:false"><?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<includelayout="@layout/title_bar"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="这是搜索界面"
android:textColor="#000000"/>
</LinearLayout></pre><p>紧跟着是:设置界面的代码:</p><pre class="brush:java;toolbar:false">packagenet.loonggg.fragment;
importandroid.os.Bundle;
importandroid.support.v4.app.Fragment;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.TextView;
publicclassFragmentSettingextendsFragment{
privateTextViewtv;
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
returninflater.inflate(R.layout.fragment_setting,container,false);
}
@Override
publicvoidonActivityCreated(BundlesavedInstanceState){
super.onActivityCreated(savedInstanceState);
tv=(TextView)getView().findViewById(R.id.titleTv);
tv.setText("设置");
}
}</pre><p>当然一样,下边对应的是设置界面的布局文件代码fragment_setting.xml:</p><pre class="brush:xml;toolbar:false"><?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<includelayout="@layout/title_bar"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="这是设置页面"
android:textColor="#000000"/>
</LinearLayout></pre><p>最后是我用的title_bar.xml文件,这个文件是嵌入到各个界面中的那个顶部的标题的布局文件,代码如下:</p><pre class="brush:xml;toolbar:false"><?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/title_bg"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/titleTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textColor="#ffffff"
android:textSize="20sp"/>
</LinearLayout></pre>