一般fragment和activity一起用的時候有兩種方法,一個是用fragment替換到activity里事先放置的站位布局
FragmentTransaction fragmentTransaction = getFragmentTransaction(); fragmentTransaction.replace(res, fragment); fragmentTransaction.commit();但是這種方法就是每次都要創建一個fragment去替換到布局里面去,每次都要把fragment里面的代碼都走一遍,如果是有很多數據的網絡請求,每次都要去請求一遍,是不是很耗時間和流量,解決的辦法就是用fragment的顯示與隱藏 看看效果
下面是實現的代碼
package com.duanlian.fragmenthideandshowdemo;import android.os.Bundle;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.support.v7.app.AppCompatActivity;import android.widget.RadioGroup;import com.duanlian.fragmenthideandshowdemo.fragment.MaFragment;import com.duanlian.fragmenthideandshowdemo.fragment.WangFragment;import com.duanlian.fragmenthideandshowdemo.fragment.ZhangFragment;import com.duanlian.fragmenthideandshowdemo.fragment.ZhaoFragment;public class MainActivity extends AppCompatActivity { PRivate RadioGroup mRadioGroup;//單選組 private FragmentTransaction mFragmentTransaction;//fragment事務 private FragmentManager mFragmentManager;//fragment管理者 private WangFragment mWangFragment; private MaFragment mMaFragment; private ZhangFragment mZhangFragment; private ZhaoFragment mZhaoFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); setClick(0);//默認進去顯示王超fragment } private void initView() { mRadioGroup = (RadioGroup) findViewById(R.id.rg); mFragmentManager = getSupportFragmentManager();//獲取到fragment的管理對象 //RadioGroup的選中監聽 mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.rb_zero://王超 setClick(0); break; case R.id.rb_one://馬漢 setClick(1); break; case R.id.rb_two://張龍 setClick(2); break; case R.id.rb_three://趙虎 setClick(3); break; } } }); } private void setClick(int type) { //開啟事務 mFragmentTransaction = mFragmentManager.beginTransaction(); //顯示之前將所有的fragment都隱藏起來,在去顯示我們想要顯示的fragment hideFragment(mFragmentTransaction); switch (type) { case 0://王超 //如果王超的fragment是null的話,就創建一個 if (mWangFragment == null) { mWangFragment = new WangFragment(); //加入事務 mFragmentTransaction.add(R.id.fragment, mWangFragment); } else { //如果王超fragment不為空就顯示出來 mFragmentTransaction.show(mWangFragment); } break; case 1: if (mMaFragment == null) { mMaFragment = new MaFragment(); //加入事務 mFragmentTransaction.add(R.id.fragment, mMaFragment); } else { //如果王超fragment不為空就顯示出來 mFragmentTransaction.show(mMaFragment); } break; case 2: if (mZhangFragment == null) { mZhangFragment = new ZhangFragment(); //加入事務 mFragmentTransaction.add(R.id.fragment, mZhangFragment); } else { //如果王超fragment不為空就顯示出來 mFragmentTransaction.show(mZhangFragment); } break; case 3: if (mZhaoFragment == null) { mZhaoFragment = new ZhaoFragment(); //加入事務 mFragmentTransaction.add(R.id.fragment, mZhaoFragment); } else { //如果王超fragment不為空就顯示出來 mFragmentTransaction.show(mZhaoFragment); } break; } //提交事務 mFragmentTransaction.commit(); } /** * 用來隱藏fragment的方法 * * @param fragmentTransaction */ private void hideFragment(FragmentTransaction fragmentTransaction) { //如果此fragment不為空的話就隱藏起來 if (mWangFragment != null) { fragmentTransaction.hide(mWangFragment); } if (mMaFragment != null) { fragmentTransaction.hide(mMaFragment); } if (mZhangFragment != null) { fragmentTransaction.hide(mZhangFragment); } if (mZhaoFragment != null) { fragmentTransaction.hide(mZhaoFragment); } }}細節請看demo 點擊下載
新聞熱點
疑難解答