实现原理:点击不同的button对Framelayout的fragment进行切换.
一.布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" tools:context="com.example.administrator.bottommenu.MainActivity"> <FrameLayout android:id="@+id/framlayout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:text="btn1" android:id="@+id/btn1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <Button android:text="btn2" android:id="@+id/btn2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <Button android:text="btn3" android:id="@+id/btn3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> </LinearLayout> </LinearLayout>
二.创建baseFragment基类,和三个fragment
public class BaseFragment extends Fragment { private static final String TAG = "BaseFragment"; }
public class Fragment1 extends BaseFragment { private static final String TAG = "Fragment1"; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { TextView textView = new TextView(getContext()); textView.setText("btn1"); return textView; } }
public class Fragment2 extends BaseFragment { private static final String TAG = "Fragment1"; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { TextView textView = new TextView(getContext()); textView.setText("btn2"); return textView; } }
public class Fragment3 extends BaseFragment { private static final String TAG = "Fragment1"; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { TextView textView = new TextView(getContext()); textView.setText("btn3"); return textView; } }三创建fragment的缓存.
public class FragmentFractory { private static final String TAG = "FragmentFractory"; private static FragmentFractory instance; private HashMap<Integer,BaseFragment> map=new HashMap<>(); private FragmentFractory() { } public static FragmentFractory getInstance() { if (instance==null){ instance=new FragmentFractory(); } return instance; } public BaseFragment getBaseFragment(int position){ if (map.get(position)!=null){ return map.get(position); } BaseFragment fragment=null; switch (position) { case 0: fragment=new Fragment1(); break; case 1: fragment=new Fragment2(); break; case 2: fragment=new Fragment3(); break; } return fragment; } }
四对对点击事件处理,页面切换
public class MainActivity extends AppCompatActivity { @Bind(R.id.framlayout) FrameLayout mFramlayout; @Bind(R.id.btn1) Button mBtn1; @Bind(R.id.btn2) Button mBtn2; @Bind(R.id.btn3) Button mBtn3; private FragmentTransaction mTransaction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); iniView(); } private void iniView() { BaseFragment fragment = FragmentFractory.getInstance().getBaseFragment(0); mTransaction = getSupportFragmentManager().beginTransaction(); mTransaction.replace(R.id.framlayout, fragment).commit(); } @OnClick({R.id.btn1, R.id.btn2, R.id.btn3}) public void onClick(View view) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); BaseFragment fragment = null; switch (view.getId()) { case R.id.btn1: fragment = FragmentFractory.getInstance().getBaseFragment(0); break; case R.id.btn2: fragment = FragmentFractory.getInstance().getBaseFragment(1); break; case R.id.btn3: fragment = FragmentFractory.getInstance().getBaseFragment(2); break; } transaction.replace(R.id.framlayout,fragment).commit(); } }