android fragment(2)
来源:互联网 发布:杭州seo外包服务 编辑:程序博客网 时间:2024/05/18 09:05
fragment之间传值
1.从activity传值给fragment或者从fragment传值给fragment
(1)构造函数中传值或者通过set方法传值
new AFragment("data");
注意fragment一定要有一个无参数的构造函数,因为在恢复fragment的时候会走无参数的构造函数
所以通过此种方式传值会有一个缺点,当恢复fragment的时候,没有带上数据参数。
(2)使用setArgument方法来传值
BaseFragment af = new AFragment();Bundle bundle = new Bundle();bundle.putString("arg", "skip a");af.setArguments(bundle);
2.从当前fragment回传值给上一个fragment或者activity
使用回调方式,使用一个基类方便管理
protected FragmentListener mFragmentListener;public String TAG = BaseFragment.this.getClass().getSimpleName();public void setFragmentListener(FragmentListener l) {mFragmentListener = l;}
public interface FragmentListener {}
BaseFragment:定义回调接口,管理返回方法(onBackPressed)
package com.example.fragment;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class BaseFragment extends Fragment {protected FragmentListener mFragmentListener;public String TAG = BaseFragment.this.getClass().getSimpleName();public void setFragmentListener(FragmentListener l) {mFragmentListener = l;}@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onActivityCreated(savedInstanceState);Log.i(TAG, "onActivityCreated");}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);Log.i(TAG, "onActivityResult");}@Overridepublic void onAttach(Activity activity) {// TODO Auto-generated method stubsuper.onAttach(activity);Log.i(TAG, "onAttach");}@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);Log.i(TAG, "onCreate");}@Overridepublic View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {// TODO Auto-generated method stubLog.i(TAG, "onCreateView");return super.onCreateView(inflater, container, savedInstanceState);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i(TAG, "onDestroy");}@Overridepublic void onDestroyView() {// TODO Auto-generated method stubsuper.onDestroyView();Log.i(TAG, "onDestroyView");}@Overridepublic void onDetach() {// TODO Auto-generated method stubsuper.onDetach();Log.i(TAG, "onDetach");}@Overridepublic void onHiddenChanged(boolean hidden) {// TODO Auto-generated method stubsuper.onHiddenChanged(hidden);Log.i(TAG, "onHiddenChanged");}@Overridepublic void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.i(TAG, "onPause");}@Overridepublic void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i(TAG, "onResume");}@Overridepublic void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i(TAG, "onStart");}@Overridepublic void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i(TAG, "onStop");}@Overridepublic void onViewCreated(View view, @Nullable Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onViewCreated(view, savedInstanceState);Log.i(TAG, "onViewCreated");}public boolean onBackPressed() {final Activity activity = getActivity();if (activity != null) {activity.onBackPressed();}return false;}public interface FragmentListener {}}MainActivity:主界面,首先启动fragment A, 并且管理fragmemt事务栈,与A Fragment通信
package com.example.fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.support.v7.app.ActionBarActivity;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.os.Bundle;public class MainActivity extends ActionBarActivity {public static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);BaseFragment af = new AFragment();Bundle bundle = new Bundle();bundle.putString("arg", "skip a");af.setArguments(bundle);af.setFragmentListener(new AFragment.OnAClickListener() {@Overridepublic void onAClick(String arg) {Log.e(TAG, "onAClick arg = " + arg);}});final FragmentManager fm = getSupportFragmentManager();FragmentTransaction ft = fm.beginTransaction();ft.add(R.id.fragment_content, new AFragment());ft.commit();findViewById(R.id.btn_go_to_a).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {}});}@Overridepublic void onBackPressed() {FragmentManager fm = getSupportFragmentManager();if (fm.getBackStackEntryCount() > 0) {fm.popBackStack();} else {super.onBackPressed();}}}
AFragment:与主界面通信,启动Fragment B, 并与Fragment B互相传值
package com.example.fragment;import android.os.Bundle;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;public class AFragment extends BaseFragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_a, container, false);}@Overridepublic void onViewCreated(View view, Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);view.findViewById(R.id.btn_back).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {notifyAClick();onBackPressed();}});view.findViewById(R.id.btn_go_to_b).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); BaseFragment f = new BFragment(); Bundle bundle = new Bundle(); bundle.putString("arg", "skip b"); f.setArguments(bundle); f.setFragmentListener(new BFragment.OnBClickListener() {@Overridepublic void onBClick(String arg) {Log.e(TAG, "onBClick arg = " + arg);}}); ft.add(R.id.fragment_content, f); ft.show(f); ft.hide(AFragment.this); ft.addToBackStack(null); ft.commit();}});}private void notifyAClick() {if (mFragmentListener instanceof OnAClickListener) {Bundle bundle = getArguments();if (bundle != null) {((OnAClickListener) mFragmentListener).onAClick(bundle.getString("arg"));}}}public interface OnAClickListener extends FragmentListener {public void onAClick(String arg);}}
BFragment:与Afragment通信
package com.example.fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;public class BFragment extends BaseFragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_b, container, false);}@Overridepublic void onViewCreated(View view, Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);view.findViewById(R.id.btn_arg).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {notifyBClick();}});}private void notifyBClick() {if (mFragmentListener instanceof OnBClickListener) {Bundle bundle = getArguments();if (bundle != null) {((OnBClickListener) mFragmentListener).onBClick(bundle.getString("arg"));}}}public interface OnBClickListener extends FragmentListener {public void onBClick(String arg);}}
0 0
- Android Fragment(2)
- android fragment(2)
- Android Fragment 小结(2)
- Android--Fragment(2)——Fragment与Activity通信
- Android Fragment的用法(2)
- Android fragment解析2
- Android Fragment(2)
- Android-Fragment(生命周期)
- Android Fragment(四)
- Android Fragment (上)
- Android Fragment (下)
- Android fragment(一)
- android基础(Fragment)
- 【Fragment】 Android Fragment生命周期详解(图文)
- Android Fragment详解(四):管理Fragment
- Android Fragment---创建Fragment
- Android Fragment---管理Fragment
- Android Fragment---创建Fragment
- 进制转换/码制转换和计算机大端和小端模式
- 梯度下降(批量&随机)和非负矩阵分解
- Git之2——基本操作
- 在eclipse 中运行 需sudo root权限执行的程序
- jquery 实现可编辑div
- android fragment(2)
- 自定义view(视图类)
- 布尔(bool)全排列
- linux下vi命令大全
- hpu1695 一道签到题
- 结构体内嵌一级指针
- 【ASP.NET】——统计在线人数、历史访问人数
- [Java]如何避免啰嗦的代码风格
- 机房收费系统(一)——MSFlexGrid控件