android fragment(2)
2015-08-08 17:21
134 查看
fragment之间传值
1.从activity传值给fragment或者从fragment传值给fragment
(1)构造函数中传值或者通过set方法传值
new AFragment("data");
注意fragment一定要有一个无参数的构造函数,因为在恢复fragment的时候会走无参数的构造函数
所以通过此种方式传值会有一个缺点,当恢复fragment的时候,没有带上数据参数。
(2)使用setArgument方法来传值
2.从当前fragment回传值给上一个fragment或者activity
使用回调方式,使用一个基类方便管理
使用示例
BaseFragment:定义回调接口,管理返回方法(onBackPressed)
AFragment:与主界面通信,启动Fragment B, 并与Fragment B互相传值
BFragment:与Afragment通信
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;MainActivity:主界面,首先启动fragment A, 并且管理fragmemt事务栈,与A 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; }
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
Log.i(TAG, "onActivityCreated");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Log.i(TAG, "onActivityResult");
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
Log.i(TAG, "onAttach");
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.i(TAG, "onCreateView");
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "onDestroy");
}
@Override
public void onDestroyView() {
// TODO Auto-generated method stub
super.onDestroyView();
Log.i(TAG, "onDestroyView");
}
@Override
public void onDetach() {
// TODO Auto-generated method stub
super.onDetach();
Log.i(TAG, "onDetach");
}
@Override
public void onHiddenChanged(boolean hidden) {
// TODO Auto-generated method stub
super.onHiddenChanged(hidden);
Log.i(TAG, "onHiddenChanged");
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, "onPause");
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, "onResume");
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "onStart");
}
@Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, "onStop");
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(view, savedInstanceState);
Log.i(TAG, "onViewCreated");
}
public boolean onBackPressed() {
final Activity activity = getActivity();
if (activity != null) {
activity.onBackPressed();
}
return false;
}
public interface FragmentListener { }
}
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";
@Override
protected 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() {
@Override
public 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() {
@Override
public void onClick(View arg0) {
}
});
}
@Override
public 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 { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_a, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); view.findViewById(R.id.btn_back).setOnClickListener( new OnClickListener() { @Override public void onClick(View arg0) { notifyAClick(); onBackPressed(); } }); view.findViewById(R.id.btn_go_to_b).setOnClickListener( new OnClickListener() { @Override public 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() { @Override public 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 { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_b, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); view.findViewById(R.id.btn_arg).setOnClickListener( new OnClickListener() { @Override public 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); } }
相关文章推荐
- hongyang的博文深入理解Android中的自定义属性 学习笔记
- Parcelable接口的使用
- xml布局内容总结(四)--Android
- Android studio 快捷键分享(Mac osx 10.5+)
- android用户界面之GridView教程实例汇总
- 【Android测试】【第七节】Monkey——源码浅谈
- Android数据手册01:Android颜色码制表
- Android四大组件之BroadCast(续)
- Android widget 之RemoteView
- Android搜索框(保存历史记录和自动匹配)带有ScrollView嵌套ListView阻尼效果
- IntentService与Service用法区别
- android kl文件
- Android性能优化典范 - 第2季
- Android ANR产生原因和解决办法
- android中的任务栈和启动模式的总结
- Android之GridView横向左右滚动
- Android EventBus现实 听说你out该
- Android性能优化典范
- android服务的总结
- android DDMS 导出files文件夹下的容时报错