1.定義Fragment基類 import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import butterknife.ButterKnife; import butterknife.Unbinder; /** * Created by Json on 2017/9/23. */ public abstract class BaseFragment extends Fragment implements View.OnClickListener{ private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN"; public FragmentActivity mActivity; private Unbinder bind; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = getActivity(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View rootView = inflater.inflate(getLayoutId(), container, false); bind = ButterKnife.bind(this, rootView); if (savedInstanceState!=null){ boolean isSupportHidden=savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN); FragmentTransaction ft=getFragmentManager().beginTransaction(); if (isSupportHidden){ ft.hide(this); }else { ft.show(this); } ft.commit(); } return rootView; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { initView(); initData(); initListener(); super.onViewCreated(view, savedInstanceState); } @Override public void onSaveInstanceState(Bundle outState) { outState.putBoolean(STATE_SAVE_IS_HIDDEN,isHidden()); super.onSaveInstanceState(outState); } @Override public void onDestroyView() { super.onDestroyView(); bind.unbind(); } protected abstract void initView(); protected abstract void initData(); protected abstract void initListener(); public abstract int getLayoutId() ; } 2.根據需求幾個Fragment繼承基類如:
import android.view.View; import com.huashan.handanbank.R; import com.huashan.handanbank.baseObject.BaseFragment; /** * Created by Json on 2017/9/23. */ public class LifeFragment extends BaseFragment { @Override protected void initView() { } @Override protected void initData() { } @Override protected void initListener() { } @Override public int getLayoutId() { return R.layout.activity_main; } @Override public void onClick(View view) { } }3.主界面使用FragmentTransaction顯示或者隱藏Fragment
public class MainActivity extends FragmentActivity implements RadioGroup.OnCheckedChangeListener{ @BindView(R.id.rb_header) RadioButton rbHeader; @BindView(R.id.rb_finance) RadioButton rbFinance; @BindView(R.id.rb_life) RadioButton rbLife; @BindView(R.id.rb_mine) RadioButton rbMine; @BindView(R.id.rg_footer) RadioGroup rgFooter; private FragmentTransaction transaction; private HeaderFragment headerFragment; private FinanceFragment financeFragment; private LifeFragment lifeFragment; private MineFragment mineFragment; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initView(); initData(); } public void initData() { rgFooter.setOnCheckedChangeListener(this); rgFooter.check(R.id.rb_header); } public void initView() { //初始化底部四個RadioButton圖片 initFooterButtons(); } private void initFooterButtons() { //設置圖片在上部 並且使用代碼實現圖片的大小,在佈局中設置圖片大小位置不理想 //參數指的是圖片在RadioButton的位置,分別爲 左 上 右 下 rbHeader.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_header_button_select), null, null); rbLife.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_life_button_select), null, null); rbFinance.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_finance_button_select), null, null); rbMine.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_mine_button_select), null, null); } /** * @param drawableId * @return 爲圖片設置參數 左右距離,上下距離,寬,高 */ public Drawable getRadioButtonDrawable(int drawableId) { float density = getResources().getDisplayMetrics().density; int with = (int) (density * 32); Drawable img_mine = getResources().getDrawable(drawableId); img_mine.setBounds(0, 0, with, with); return img_mine; } @Override public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) { FragmentManager fragmentManager = getSupportFragmentManager(); transaction = fragmentManager.beginTransaction(); hideAllFragment(transaction); switch (i){ case R.id.rb_header: if (headerFragment==null){ headerFragment = new HeaderFragment(); transaction.add(R.id.content,headerFragment); }else { transaction.show(headerFragment); } break; case R.id.rb_finance: if (financeFragment==null){ financeFragment = new FinanceFragment(); transaction.add(R.id.content,financeFragment); }else { transaction.show(financeFragment); } break; case R.id.rb_life: if (lifeFragment==null){ lifeFragment = new LifeFragment(); transaction.add(R.id.content,lifeFragment); }else { transaction.show(lifeFragment); } break; case R.id.rb_mine: if (mineFragment==null){ mineFragment = new MineFragment(); transaction.add(R.id.content,mineFragment); }else { transaction.show(mineFragment); } break; } transaction.commit(); } private void hideAllFragment(FragmentTransaction transaction) { if (headerFragment!=null) this.transaction.hide(headerFragment); if (financeFragment!=null) this.transaction.hide(financeFragment); if (lifeFragment!=null) this.transaction.hide(lifeFragment); if (mineFragment!=null) this.transaction.hide(mineFragment); } }4.佈局
<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"></FrameLayout> <RadioGroup android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" android:layout_marginBottom="5dp" android:id="@+id/rg_footer" > <RadioButton android:id="@+id/rb_header" android:text="首頁" style="@style/footer_radioButton_style" /> <RadioButton android:id="@+id/rb_finance" android:text="金融" style="@style/footer_radioButton_style" /> <RadioButton android:id="@+id/rb_life" android:text="生活" style="@style/footer_radioButton_style" /> <RadioButton android:id="@+id/rb_mine" android:text="我的" style="@style/footer_radioButton_style" /> </RadioGroup> </LinearLayout>5.style屬性
<style name="footer_radioButton_style"> <item name="android:gravity">center</item> <item name="android:layout_width">0dp</item> <item name="android:layout_height">50dp</item> <item name="android:layout_weight">1</item> <item name="android:text">14sp</item> <item name="android:textColor">@drawable/footer_textcolor_select</item> <item name="android:button">@null</item> </style>