在UI中动态更新Fragment中的控件监听,显示等
来源:互联网 发布:魔兽世界国服数据库 编辑:程序博客网 时间:2024/06/15 23:38
在开发中有时候会遇见一些的情况:根据不同的需求切换不同的fragment ,然后一些操作使当前fragment中显示的内容进行一些调整。很多时候我们都是想的在fragment添加到Activity中时通过 fragmet. getView()获取fragment对象的View 。然后用findViewById()获取到fragment中的控件对象进行操作,很悲剧的是不管用啊有木有。我是个小白,研究了近一周都没搞定,只有采用另一种方式对fragment中的控件进行操作了。
一. 发送广播更新UI
UI中需要时发送一条广播 可顺便传入一些需要的值,在fragment中接收广播,获取值并对fragment中的控件进行操作,经本人验证完全可以。以下是Demo关键代码
在Fragment中
public class GasFragment extends Fragment {private TextView gasName;private TextView gasadderss;private ReceiveBroadCast receiveBroadCast;publicGasFragment (){}@Overridepublic void onAttach(Activity activity) {/** 注册广播 */receiveBroadCast = new ReceiveBroadCast(); IntentFilter filter = new IntentFilter(); filter.addAction("com.gasFragment"); //只有持有相同的action的接受者才能接收此广播 activity.registerReceiver(receiveBroadCast, filter);super.onAttach(activity);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment_gas, null);gasName = (TextView) view.findViewById(R.id.frag_tv_gasname);gasadderss = (TextView) view.findViewById(R.id.fraggas_tv_adderss); } });return view;} class ReceiveBroadCast extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //得到广播中得到的数据,并显示出来 String gasname = intent.getExtras().getString("gasName"); String address = intent.getExtras().getString("address"); gasadderss.setText("地址:\n "+address); gasName.setText(gasname); }} /** *注销广播 * */ @Override public void onDestroyView() { getActivity().unregisterReceiver(receiveBroadCast); super.onDestroyView(); } }
在UI中
public class MainPage extends FragmentActivity {private GasFragment gasFragment; //加油站的fragment@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main_page); gasFragment = new GasFragment(); FragmentManager fm = getSupportFragmentManager();FragmentTransaction ft = fm.beginTransaction();ft.replace(R.id.main_fl_fragment, couponFragment);// 将帧布局替换成Fragmentft.commit();// 提交Intent intent = new Intent(); // Itent就是我们要发送的内容intent.setAction("com.gasFragment"); // 设置你这个广播的actionintent.putExtra("gasName","核反应能量加油站");intent.putExtra("address", "太平洋街11号");sendBroadcast(intent); // 发送广播}}
对应xml就不用上传了吧,很简单的布局。这样就可以动态的更新fragment中的显示内容了。
二. 通过Handler刷新Fragment
在需要交互的Activity中建立Handler对象 具体上代码
public class MainActivity extends FragmentActivity implements OnClickListener{FrameLayout fl_replace;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);fragmentA = new FragmentA();fragmentA.setHandler(handler);fl_replace=(FrameLayout) findViewById(R.id.fl_replace);findViewById(R.id.btn_replace).setOnClickListener(this);findViewById(R.id.btn_refresh).setOnClickListener(this);findViewById(R.id.btn_return).setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_replace:fl_replace.setVisibility(View.VISIBLE); FragmentManager fm=getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.fl_replace, fragmentA); ft.commit();break;case R.id.btn_refresh:handler.sendEmptyMessage(FragmentA.ACT_REF);break;case R.id.btn_return: fl_replace.setVisibility(View.GONE);break;}}Handler handler =new Handler(){public void handleMessage(android.os.Message msg) {switch (msg.what) {case FragmentA.ACT_REF:// 在Activity中刷新FragmentfragmentA.setTextStr("on Activity refresh ");break;case FragmentA.FRAG_REF://在Fragment中刷新FragmentfragmentA.setTextStr("on Fragment refresh ");break;}};};private FragmentA fragmentA;}在Fragment 中获取Handler 并通过此对象发消息 代码如下
public class FragmentA extends Fragment{public static final int FRAG_REF=0;//on Fragment refresh Fragmentpublic static final int ACT_REF=1;//on Activity refresh Fragmentprivate TextView tv;public FragmentA(){}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view=inflater.inflate(R.layout.frag_a, null); tv = (TextView) view.findViewById(R.id.fragment_tv); view.findViewById(R.id.fragment_btn).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {handler.sendEmptyMessage(FRAG_REF);}}); return view;} Handler handler; public void setHandler(Handler handler){ this.handler =handler; } public void setTextStr(String str){ tv.setText(str); }}handler 更新是随后添加的 所以我写了一个Demo 需要的可以去下载,一看就懂了 很简单的 http://download.csdn.net/detail/yangbo437993234/8423493
0 0
- 在UI中动态更新Fragment中的控件监听,显示等
- 在Fragment继承类中更新UI。
- 在AS中动态监听控件事件
- 在activity中更新fragment中的界面
- 监听Fragment中控件接口
- 在Fragment的延时操作中如何更新UI
- 在Fragment中修改Activity中的控件
- Fragment 中嵌套Fragment,更新数据,UI
- Fragment 中嵌套Fragment,更新数据,UI
- 动态更新ViewPager中的Fragment
- 在Android中实现service动态更新UI界面
- 在Android中实现service动态更新UI界面
- asynctask方式在UI线程中更新数据显示
- WinForm中使用XtraGrid控件,实现在界面中动态修改列显示,列名列宽等(进阶)
- Fragment中监听自身是否显示状态
- 安卓在Activity中获取Fragment中的控件
- 动态添加Jquery元素后在UI中没有显示
- 如何在Fragment中监听触摸事件
- 单片机 状态机编程
- stl heap sort
- js/jquery解析json和数组格式的方法介绍
- 2014.7.2
- sql-server 2005数据库文件恢复(检测到基于一致性的逻辑 I/O 错误)
- 在UI中动态更新Fragment中的控件监听,显示等
- BinaryTreeInorder(leetcode)
- 利用Powershell获取公司内部机器的资源信息,作为企业后续资产管理的基本途径!
- POJ 3729 Facer’s string (后缀数组)
- java 静态导入
- 3、文字及字体、菜单按钮、几何绘制
- 黑马程序员——黑马学习日志之十 集合(一)
- BinaryTreeInorder(leetcode)
- ASP.NET MVC Model绑定(五)