Android进阶之路 - Fragment(碎片化)、进栈、不进栈的简单使用(一)
2017-01-07 20:53
459 查看
这篇文章讲解的是Fragment在入门使用和开发使用的简单技术,对于初期学期人员可能认为Fragment的使用并不多见,这个其实是知识匮乏的误区,因为Fragment的使用场景比比皆是,文章不长,下面的请各位直接吸收咯。
单纯的来看,Fragment是寄生于Activity的活动,所以如果没有寄生体,Fragment自然不会存在。
从生命周期来看Fragment相比Activity之间多了 OnAttach/onDetach与onCreateView/onDestroy俩组生命周期,同时还有为了确保Activity已经创立完成的onActvityCreate生命周期
结构:
1.MainActivity、SecoundFreagment(不进栈)、CostomFragment(进栈)代码
2.对应的XML展示(俩个Fragment的Xml只看一个就好,没有什么技术含量)
3.使用中经常出现的小问题(可以小小注意一下,或许就会解决你的问题)
作为一名小小程序员,直接上代码(程序均可正常运行):
MainActivity:
SecoundFragment:
CostomFragment:
MainActivity的Xml:
SencoundFragment的Xml:
CostomFragment的Xml:
问题注意点:
1.首先我们要有V4包,或者更高的兼容包
2.对应的Activity需要继承FragmentActivity
3.Fragment获取的管理者是SupportFragmentMessager不是FragmentMessager
4.进栈,不进栈的关键在于有没有addToBackStack(null),同时进栈会有一个模式,返回的时候往往会根据栈的当前结构进行返回,如果不进栈大多是要直接Back就退出程序了
5.如果自己写代码,千万要记得replace之后记得commit(提交)
6.子Fragemnt记得集成Fragment之后,需要导入的包是V4下的
单纯的来看,Fragment是寄生于Activity的活动,所以如果没有寄生体,Fragment自然不会存在。
从生命周期来看Fragment相比Activity之间多了 OnAttach/onDetach与onCreateView/onDestroy俩组生命周期,同时还有为了确保Activity已经创立完成的onActvityCreate生命周期
结构:
1.MainActivity、SecoundFreagment(不进栈)、CostomFragment(进栈)代码
2.对应的XML展示(俩个Fragment的Xml只看一个就好,没有什么技术含量)
3.使用中经常出现的小问题(可以小小注意一下,或许就会解决你的问题)
作为一名小小程序员,直接上代码(程序均可正常运行):
MainActivity:
package com.example.fragmentdemo; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends FragmentActivity implements OnClickListener { private TextView mButton1; private TextView mButton2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 事件 initEvent(); //初始化布局 InitializeData(); } /** * 事件处理 * */ private void initEvent() { mButton1 = (TextView) findViewById(R.id.main_button1); mButton2 = (TextView) findViewById(R.id.main_button2); mButton1.setOnClickListener(this); mButton2.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.main_button1: getSupportFragmentManager().beginTransaction().replace( R.id.main_fragment, new SencoundFragment()).commit(); Toast.makeText(MainActivity.this, "没有添加Onclick触发", 0).show(); break; case R.id.main_button2: getSupportFragmentManager().beginTransaction().replace( R.id.main_fragment, new SencoundFragment()).addToBackStack(null).commit(); //这里需要注意的就是addToBackStack(null)这个方法了 Toast.makeText(MainActivity.this, "添加返回栈Onclick触发", 0).show(); break; default: break; } } /** * 初始化底部布局 * */ private void InitializeData() { getSupportFragmentManager().beginTransaction().replace( R.id.main_fragment, new CostomFragment()).commit(); } }
SecoundFragment:
package com.example.fragmentdemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * 替换的Fragment页面 * */ public class SencoundFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=container.inflate(SencoundFragment.this.getActivity(), R.layout.fragment_sencound, null); // View view = inflater.inflate(R.layout.fragment_sencound, null);俩者均可填充layout return view; } }
CostomFragment:
package com.example.fragmentdemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * 替换的Fragment页面 * */ public class CostomFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // View view=container.inflate(CostomFragment.this.getActivity(), R.layout.fragment_costom, null); View view = inflater.inflate(R.layout.fragment_costom, null); return view; } }
MainActivity的Xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:id="@+id/main_button1" android:layout_width="match_parent" android:layout_height="30dp" android:layout_gravity="center" android:gravity="center" android:text="@string/one" /> <TextView android:id="@+id/main_button2" android:layout_width="match_parent" android:layout_height="30dp" android:layout_gravity="center" android:gravity="center" android:text="@string/two" /> <FrameLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/main_fragment" /> </LinearLayout>
SencoundFragment的Xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="Secound页面的Fragment" android:gravity="center" /> </LinearLayout>
CostomFragment的Xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="Costom页面" android:gravity="center" /> </LinearLayout>
问题注意点:
1.首先我们要有V4包,或者更高的兼容包
2.对应的Activity需要继承FragmentActivity
3.Fragment获取的管理者是SupportFragmentMessager不是FragmentMessager
4.进栈,不进栈的关键在于有没有addToBackStack(null),同时进栈会有一个模式,返回的时候往往会根据栈的当前结构进行返回,如果不进栈大多是要直接Back就退出程序了
5.如果自己写代码,千万要记得replace之后记得commit(提交)
6.子Fragemnt记得集成Fragment之后,需要导入的包是V4下的
相关文章推荐
- android Fragment的简单使用
- Android Fragment简单使用
- android学习之fragment的简单使用
- Android进阶之路 - Picasso的简单使用与工具封装
- Android之---FragmentTabHost使用简单介绍
- Android进阶之路 - 自定义控件的简单使用(一)
- Android上Fragment的简单使用
- Android 实现同个Activity中存在多个Fragment多次切换之后依次返回(一)(Fragment回退栈简单使用)
- Android进阶之路-标题与Fragment的简单演奏
- Android使用Fragment应用实战,简单的实习例子
- Android:使用fragment(碎片)—让你的应用更灵活(一)简单运用
- Android fragment的简单使用使用和通信
- Android-FragmentTabHost的简单使用
- android FragmentTabHost 的简单使用
- android DialogFragment简单使用
- android菜鸟学习笔记27----Fragment的简单使用
- android FragmentTabHost 的简单使用
- Android的DialogFragment的简单使用。
- Android 实现同个Activity中存在多个Fragment多次切换之后依次返回(一)(Fragment回退栈简单使用)
- Android 中 Fragment 的简单使用