import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.FrameLayout; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener, BlankFragment.CallBack { private Button bn1; private Button bn2; private FrameLayout ft1; private FragmentManager manager; private FragmentTransaction transaction; private BlankFragment fragment1; private BlankFragment2 fragment2; private Button remove; private Button hide; private Button show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); initFrameLayout(); initView(); } private void initFrameLayout() { //fragmet管理类用来控制fragment的隐藏显示和替换等(获取管理者) manager = getSupportFragmentManager(); } private void initView() { bn1 = (Button) findViewById( R.id.bn1 ); bn2 = (Button) findViewById( R.id.bn2 ); ft1 = (FrameLayout) findViewById( R.id.ft1 ); bn1.setOnClickListener( this ); bn2.setOnClickListener( this ); remove = (Button) findViewById( R.id.remove ); remove.setOnClickListener( this ); hide = (Button) findViewById( R.id.hide ); hide.setOnClickListener( this ); show = (Button) findViewById( R.id.show ); show.setOnClickListener( this ); } @Override public void onClick(View v) { //等于生活中的秘书的工作,(管理具体的事物) transaction = manager.beginTransaction(); if (fragment1 != null ) { transaction.hide( fragment1 ); }if (fragment2 != null){ transaction.hide( fragment2 ); } switch (v.getId()) { case R.id.bn1: if (fragment1 == null) { try { fragment1 = BlankFragment.class.newInstance();//使用单利模式创建对象,就是只能创建一次对象, Bundle bundle = new Bundle(); bundle.putString( "key","时代峰峻搜地方你说的那份思念就是个" ); fragment1.setArguments( bundle ); fragment1.setBack( MainActivity.this ); transaction.add( R.id.ft1, fragment1 ); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } else { transaction.show( fragment1 ); } break; case R.id.bn2: if (fragment2 == null) { try { fragment2 = BlankFragment2.class.newInstance();//使用单利模式创建对象,就是只能创建一次对象, transaction.add( R.id.ft1, fragment2 ); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } else { transaction.show( fragment2 ); } break; case R.id.remove: transaction.remove( fragment1 ); break; case R.id.hide: transaction.hide( fragment1 ); case R.id.show: transaction.show( fragment1); break; } transaction.commit(); } @Override public void setData(String s) { Toast.makeText( this, s, Toast.LENGTH_SHORT ).show(); } }
package com.example.framel; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; /** * A simple {@link Fragment} subclass. */ public class BlankFragment extends Fragment { private CallBack back; private View inflate; private Button bn; public void setBack(CallBack back) { this.back = back; } public BlankFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment Bundle bundle = getArguments(); String key = bundle.getString( "key" ); Toast.makeText( getContext(), ""+key, Toast.LENGTH_SHORT ).show(); inflate = inflater.inflate( R.layout.fragment_blank, container, false ); bn = inflate.findViewById( R.id.bnf ); bn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { back.setData( "接收到了" ); } } ); return inflate; } interface CallBack{ void setData(String s); } }
package com.example.framel; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; /** * A simple {@link Fragment} subclass. */ public class BlankFragment2 extends Fragment { public BlankFragment2() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate( R.layout.fragment_blank_fragment2, container, false ); } }