標籤:
這裡只是給出三個類RightFragment、LeftFragment、MainActivity中的簡易代碼,至於布局怎麼設定,不做贅述。
思路:從片段一擷取與之依託的活動執行個體,片段一可以調用活動裡面的功能;在活動中擷取片段二的活動執行個體,活動可以使用片段二的功能。片段一間接調用片段二的功能。
一、RightFragment:
package com.example.fragmenttest2;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class RightFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { MainActivity activity = (MainActivity) getActivity();//擷取與之依託的活動執行個體LeftFragment callleft = activity.callleft();callleft.show();//使用活動的功能,這個功能正好是調用片段二的方法。View view = inflater.inflate(R.layout.right_fragment, container, false);return view;}public void show(){System.out.println("RightFragment");}}
二、MainActivity:
package com.example.fragmenttest2;import android.os.Bundle;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {private LeftFragment leftFragment;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = (Button) findViewById(R.id.button);Button button1 = (Button) findViewById(R.id.button1);button.setOnClickListener(this);button1.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button://按鈕一,實現了一次替換片段的功能AnotherRightFragment fragment = new AnotherRightFragment();FragmentManager fragmentManager = getFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();transaction.replace(R.id.right_layout, fragment);transaction.addToBackStack(null);transaction.commit();break;case R.id.button1:leftFragment = (LeftFragment) getFragmentManager()//按鈕二,可直接使用left片段即片段二的功能.findFragmentById(R.id.left_fragment);leftFragment.show();break;default:break;}}public void show(){System.out.println("MainActivity");}public LeftFragment callleft(){//抽取方法,調用片段二的功能leftFragment = (LeftFragment) getFragmentManager().findFragmentById(R.id.left_fragment);return leftFragment;}}
三、LeftFragment:
package com.example.fragmenttest2;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class LeftFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.left_fragment, container, false);return view;}public void show(){//片段二的功能,這裡只為了示範知識列印一行輸出System.out.println("LeftFragment");}}
啟動程式,發現直接列印的一行輸出:
LeftFragment
這樣就實現了片段與活動,以及片段與片段直接的通訊。
Android初級教程Fragment到Fragment的通訊初探