Android初级教程Fragment到Fragment的通信初探
Posted 杨道龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android初级教程Fragment到Fragment的通信初探相关的知识,希望对你有一定的参考价值。
这里只是给出三个类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 { @Override public 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; @Override protected 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); } @Override public 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 { @Override public 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的通信初探的主要内容,如果未能解决你的问题,请参考以下文章
Android Fragment 的使用,一些你不可不知的注意事项