浅谈Fragment
来源:互联网 发布:ubunte怎么编程 编辑:程序博客网 时间:2024/05/17 04:13
浅谈Fragment
fragment是可以放置在活动中的一个应用程序的用户界面或行为。
生命周期
fragment的生命周期与受所处的activity的生命周期控制,同时它也拥有自己的生命的周期,包括基本的生命周期以及与用户进行交互的生命周期。以下为使fragment恢复恢复状态(与用户进行交互)的核心系列生命周期方法:
1、onAttach:一旦该fragment与其活动相关联,就会调用
2、onCreate:对fragment进行初始化
3、onCreateView:创建并返回与fragment相关联的视图层次结构.
4、onActivityCreated:告诉fragment其activity已经完成了自己的Activity.onCreate().
5、onViewStateRestored:告诉fragment其视图层次结构的所有保存状态已被还原.
6、onStart:使该fragment对用户可见.
7、onResume:使fragment开始与用户进行交互.
fragment的实现
可以通过两种方式向 activity 添加fragment:
1、在 Activity 的xml文件中添加,将fragment作为view来定义
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="com.example.Fragment" android:id="@+id/list" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /></LinearLayout>
2、通过代码将fragment添加到某个ViewGroup
主要是通过FragmentManager来获取实例
FragmentManager fragmag = getFragmentManager();FragmentTransaction fragtrans = fragmag.beginTransaction();ExampleFragment fragment = new ExampleFragment();fragtrans.add(R.id.fragment, fragment);fragtrans.commit();
FragmentManager可以对fragment进行管理:
findFragmentById():通过fragment的id获取fragment
popBackStack():将fragment从返回栈中弹出
addOnBackStackChangedListener():注册一个侦听返回栈变化的侦听器
FragmentTransaction用于执行fragment的事务,根据用户行为实现添加、移除、替换以及其他操作,一旦通过FragmentTransaction做出了更改,就必须调用commit()使更改生效。
一个简单的实例
主要代码:
MainActivity.java
public class MainActivity extends Activity implements OnClickListener { private Button one,two,three; private FragmentManager fm; private FragmentTransaction ft; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { one = (Button)this.findViewById(R.id.one); two = (Button)this.findViewById(R.id.two); three = (Button) this.findViewById(R.id.three); one.setOnClickListener(this); two.setOnClickListener(this); three.setOnClickListener(this); } @Override public void onClick(View v) { fm = getFragmentManager(); ft = fm.beginTransaction(); if(v == one){ Intent intent = new Intent(MainActivity.this, oneFragment.class); startActivity(intent); }else if(v == two){ ft.replace(R.id.fragment_content,new twoFragment()); }else if(v == three){ ft.add(R.id.fragment_content,new threeFragment()); } ft.commit(); }}
按钮“one”实现跳转到另一个activity,按钮“two”主要用Transaction的replace方法添加fragment,按钮“three”主要用Transaction的add方法添加fragment。
replace方法会更新fragment,而add方法在原有的fragment上添加了新的fragment。
可看一下两图的效果:
这是在点击按钮two后再点击按钮three的效果,两个fragment重叠在一起
这是在点击按钮three后再点击按钮two的效果,此时只显示fragmenttwo
按钮“one”跳转实现的oneFragment是显示花的品种及其相应的信息,主要代码如下:
public class oneFragment extends Activity implements oneListFragment.Callbacks{ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.one_main); } // 实现Callbacks接口必须实现的方法 @Override public void onItemSelected(Integer id) { Bundle arguments = new Bundle(); arguments.putInt(DesFragment.ITEM_ID, id); DesFragment fragment = new DesFragment(); fragment.setArguments(arguments); getFragmentManager().beginTransaction() .replace(R.id.fragment_content, fragment) .commit(); }}
oneListFragment主要用于显示fragment,以及处理fragment,以实现点击相应的花品种显示相应的信息在fraglayout中,效果如下图所示:
oneListFragment.java
public class oneListFragment extends ListFragment { private Callbacks mCallbacks; // 定义一个回调接口,该Fragment所在Activity必须实现该接口 public interface Callbacks { public void onItemSelected(Integer id); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //用adapter填充fragment setListAdapter(new ArrayAdapter<Connect.Flower>(getActivity(), android.R.layout.simple_list_item_activated_1, android.R.id.text1, Connect.ITEMS)); } // 当该Fragment被添加时,回调该方法 @Override public void onAttach(Activity activity) { super.onAttach(activity); if (!(activity instanceof Callbacks)) { throw new IllegalStateException( "error"); } mCallbacks = (Callbacks)activity; } // 当该Fragment被删除时,回调该方法 @Override public void onDetach() { super.onDetach(); mCallbacks = null; } // 当用户单击某列表项时激发该方法 @Override public void onListItemClick(ListView listView , View view, int position, long id) { super.onListItemClick(listView, view, position, id); // 激发mCallbacks的onItemSelected方法 mCallbacks.onItemSelected(Connect .ITEMS.get(position).id); }}
作者:魏超凡:原文地址
- 浅谈Fragment
- 浅谈 Fragment
- 浅谈Fragment
- 浅谈Fragment
- 浅谈Android Fragment
- 浅谈 Fragment 生命周期
- 浅谈 Fragment 生命周期
- 浅谈如何静态创建Fragment
- 浅谈Activity,Fragment模块化封装
- 浅谈ViewPager+Fragment的使用和理解
- android基础学习(一)--浅谈Fragment间跳转
- 浅谈viewpager+fragment缓存问题的优化
- 浅谈Android中的 Fragment、生命周期回调方法 以及使用
- Android基础篇之浅谈Fragment(app包)
- 关于fragment和activty的通信个人的总结浅谈
- Android基础--浅谈Fragment的状态可见与不可见
- Fragment
- Fragment
- 重新认识HTML系列004——全局属性contenteditable
- 数据结构BinaryTree实例(五):树的深度与广度
- Leetcode练习<十六> 爬楼梯与斐波那契数列
- 用docx4j生成word之后转成pdf
- 【Python学习系列十七】基于scikit-learn库逻辑回归训练模型(delta比赛代码2)
- 浅谈Fragment
- 5-36 社交网络图中结点的“重要性”计算 (30分)
- linux回到上次目录与历史命令查找快捷方式
- TensorFlow实现基于LSTM的语言模型
- python基础之字符串
- springmvc 设置content-type为 application/json
- App保存密码相关知识
- lhgdialog api详情
- Android MediaProjection 录屏