Fragment跟Activity之间的通信
来源:互联网 发布:丧尸围城2优化补丁 编辑:程序博客网 时间:2024/06/03 16:08
先在Activity定义接口和一个Handler,接口的作用是让碎片接收Activity的指令,而Handler用于接收碎片传来的指令,Activity在执行操作.如下所示:
package com.example.fragmentactivity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentTransaction;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.FrameLayout;public class MainActivity extends FragmentActivity implements OnClickListener { private Button button1; private String fragmentName; private OnButtonClickedListener buttonClickedListener; /** * 定义一个Handler用于接收黄色碎片给Activity发出来的指令 */ public Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg!=null){ switch (msg.what) { case 100: /** * 接收到黄色碎片发来的指令,Activity执行替换操作 */ fragmentName=Fragment2.class.getName(); replaceFragment(R.id.FrameLayout1, fragmentName); break; default: break; } } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1=(Button) findViewById(R.id.button1); button1.setOnClickListener(this); /** * 加载黄色碎片 */ fragmentName=Fragment1.class.getName(); replaceFragment(R.id.FrameLayout1, fragmentName); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: if(buttonClickedListener!=null){ buttonClickedListener.onclicked("Activity:我不想要这个黄色碎片了,点击下面的按钮给我换个绿色的碎片"); } break; default: break; } } /* * * 加载碎片 */ protected void replaceFragment(int viewResource, String fragmentName) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Fragment fragment = Fragment.instantiate(this, fragmentName); ft.replace(viewResource, fragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.commit(); getSupportFragmentManager().executePendingTransactions(); } /** * 定义一个接口 * @author zqy * */ public interface OnButtonClickedListener{ /** * 里面传个值 * @param s */ public void onclicked(String s); } /** * * @param buttonClickedListener * 写一个对外公开的方法 */ public void setButtonClickedListener(OnButtonClickedListener buttonClickedListener){ this.buttonClickedListener=buttonClickedListener; } }这就是Activity里面的代码,我们在去写两个碎片如下所示:
Fragment1:
package com.example.fragmentactivity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.example.fragmentactivity.MainActivity.OnButtonClickedListener;public class Fragment1 extends Fragment implements OnClickListener { private TextView textView; private Button button; private Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MainActivity activity=(MainActivity) getActivity(); /** * 得到Activity的Handler */ handler=activity.handler; /** * 加监听 */ activity.setButtonClickedListener(new OnButtonClickedListener() { @Override public void onclicked(String s) { /* * 显示Activity传来的内容 */ textView.setText(s); button.setVisibility(View.VISIBLE); } }); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.item1, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); textView=(TextView) getActivity().findViewById(R.id.textView1); button=(Button) getActivity().findViewById(R.id.button2); button.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button2: /** * 发送指令到Activity */ handler.sendEmptyMessage(100); break; default: break; } }
这个碎片让它的Activity实现这个接口,在把接口里面的值显示到页面上,在点击这个碎片里面的Button给它的Activity发送一个消息.这里面我发的是100.
Fragment2:
package com.example.fragmentactivity;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class Fragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.item2, null); }}
0 0
- 详解Fragment跟Activity之间的通信
- Fragment跟Activity之间的通信
- 详解Fragment跟Activity之间的通信
- Fragment跟Activity之间的通信(互相调用方法)
- fragment 跟activity之间的跳转
- Activity与Fragment,Fragment与Fragment之间的通信
- Android Fragment---跟Activity通信
- Android Fragment---跟Activity通信
- Android Fragment---跟Activity通信
- Fragment和Activity之间的相互通信
- Fragment与Activity之间的通信
- Fragment Activity之间的通信方法之一
- Fragment和Activity之间的相互通信
- android Activity与Fragment之间的通信
- Activity和Fragment之间的通信
- fragment与activity之间的通信
- Activity与Fragment之间的通信详解
- Fragment和Activity之间的通信
- 牛人博客
- [POJ2774]Long Long Message(后缀数组)
- LeetCode 303. Range Sum Query - Immutable(数组求和)
- [BZOJ 3932][CQOI 2015]任务查询系统
- 用curl 发送 post 请求
- Fragment跟Activity之间的通信
- RunTime机制详解(五)
- bzoj 4516: [Sdoi2016]生成魔咒 后缀数组
- 【总结】CDQ分治
- 数组 大佛勿喷
- hdoj 4506 小明系列故事——师兄帮帮忙<二分求幂>
- Java基础篇(泛型<T>常见用法)
- 中缀表达式转换为后缀表达式的算法
- LeetCode 304. Range Sum Query 2D - Immutable(矩阵求和)