• Fragment学习笔记


    Fragment为大量型号,尺寸,分辨率的设备提供了一种统一的UI优化方案。将Activity分解为多个Fragment,将极大地提高UI的灵活性,也更容易为一些新的设备配置带来更好的用户体验。

    onCreate:

    创建Fragment时系统调用它。

    onCreateView:

    首次绘制用户界面时系统调用这个方法。

    onPause:

    当用户离开Fragment时系统调用此方法。

    onAttach:

    当Fragment与Acitivity绑定时调用。

    onActivityCreated:

    当Fragment绑定的Activity调用onCreate方法时调用。

    onDestroyView:

    当与Fragment相关联的视图层次被删除时调用。

    onDetach:

    当Fragment与Acitivity解绑定时调用。

    FragmentManager是每个Activity用来管理它所包含的Fragment。在Activity中切换Fragment时必须用到FragmentManager,Activity可以通过使用getFragmentManager方法来访问FragmentManager。

    代码展示:

    MainActivity.java

    package com.example.demo15;

    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.app.FragmentTransaction;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.RadioGroup;
    import android.widget.RadioGroup.OnCheckedChangeListener;


    public class MainActivity extends Activity implements OnCheckedChangeListener{

    private RadioGroup group;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    group=(RadioGroup) findViewById(R.id.radiogroup);
    group.setOnCheckedChangeListener(this);
    }
    @SuppressLint("NewApi") @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
    switch(checkedId){
    case R.id.first:{
    Intent intent=new Intent(this,MainActivity2.class);
    startActivity(intent);
    break;
    }
    case R.id.second:{
    MyFragment2 fragment2=new MyFragment2();
    FragmentManager fragmentManager=getFragmentManager();
    FragmentTransaction beginTransaction=fragmentManager.beginTransaction();
    beginTransaction.add(R.id.frame ,fragment2);
    beginTransaction.addToBackStack(null);
    beginTransaction.commit();
    break;
    }
    case R.id.thrid:{
    Intent intent=new Intent(MainActivity.this,MainActivity3.class);
    startActivity(intent);
    break;
    }
    case R.id.fourth:{
    Intent intent=new Intent(MainActivity.this,MainActivity4.class);
    startActivity(intent);
    break;
    }
    }
    }
    }

    MainActivity2.java

    package com.example.demo15;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;

    public class MainActivity2 extends Activity{
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main2);

    Button button=(Button) findViewById(R.id.button);
    tv=(TextView) findViewById(R.id.text);
    button.setText("刀冲");
    button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    tv.setText("TextView from 刀冲");
    }
    });
    }
    }

    MainActivity3.java

    package com.example.demo15;

    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.app.FragmentTransaction;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;

    public class MainActivity3 extends Activity{
    private Button button;
    private Fragment frag;
    private boolean flag=true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main3);
    init();
    button=(Button) findViewById(R.id.button);
    button.setOnClickListener(new OnClickListener() {


    @SuppressLint("NewApi") public void onClick(View v) {
    FragmentManager fragmentManager=getFragmentManager();
    FragmentTransaction beginTransaction=fragmentManager.beginTransaction();

    if(flag){
    MyFragment4 frag4=new MyFragment4();
    beginTransaction.replace(R.id.layout,frag4);
    }else{
    MyFragment3 frag3=new MyFragment3();
    beginTransaction.replace(R.id.layout,frag3);
    }

    beginTransaction.commit();
    }
    });
    }

    @SuppressLint("NewApi") private void init() {
    FragmentManager fragmentManager=getFragmentManager();
    FragmentTransaction beginTransaction=fragmentManager.beginTransaction();
    MyFragment3 frag3=new MyFragment3();
    beginTransaction.add(R.id.layout,frag3);
    beginTransaction.commit();
    }
    }

    MainActivity4.java

    package com.example.demo15;

    import com.example.demo15.MyFragment5.MyListener;

    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.app.FragmentTransaction;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    public class MainActivity4 extends Activity implements MyListener{

    private EditText editext;
    private Button send;
    @SuppressLint("NewApi") @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main4);
    editext=(EditText) findViewById(R.id.editText);
    send=(Button) findViewById(R.id.send);

    send.setOnClickListener(new OnClickListener() {

    @SuppressLint("NewApi") @Override
    public void onClick(View v) {
    String text=editext.getText().toString();
    MyFragment5 fragment5=new MyFragment5();
    Bundle bundle=new Bundle();
    bundle.putString("name",text);
    fragment5.setArguments(bundle);
    FragmentManager fragmentManager=getFragmentManager();
    FragmentTransaction beginTransaction=fragmentManager.beginTransaction();

    beginTransaction.add(R.id.layout,fragment5,"fragment5");
    beginTransaction.commit();
    Toast.makeText(MainActivity4.this,"fragment4"+text,Toast.LENGTH_SHORT).show();
    }
    });

    FragmentManager fragmentManager=getFragmentManager();
    Fragment findFragmentById=fragmentManager.findFragmentById(R.id.frag);
    MyFragment frag=(MyFragment)findFragmentById;
    frag.setAaa("frag-aaa-");
    }

    @Override
    public void thank(String code) {
    Toast.makeText(MainActivity4.this,"收到"+code+",客气了",Toast.LENGTH_SHORT).show();
    }

    }

    MyFragment.java

    package com.example.demo15;

    import android.annotation.SuppressLint;
    import android.app.Fragment;
    import android.os.Bundle;
    import android.support.annotation.Nullable;

    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;


    @SuppressLint("NewApi") public class MyFragment extends Fragment{

    private String aaa;


    public String getAaa() {
    return aaa;
    }


    public void setAaa(String aaa) {
    this.aaa = aaa;
    }


    @Override
    public View onCreateView(LayoutInflater inflater,
    @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    //layout布局文件转换为View对象
    //1.Fragment加载的布局文件 2.加载layout的父ViewGroup 3.false 不返回父ViewGroup
    View view=inflater.inflate(R.layout.fragment,container,false);
    TextView text=(TextView) view.findViewById(R.id.text);
    Button button=(Button) view.findViewById(R.id.button);
    text.setText("静态加载Fragment");
    button.setText("done");
    button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    String value=getAaa();
    Toast.makeText(getActivity(),"value="+value,Toast.LENGTH_SHORT).show();
    }
    });
    return view;
    }
    }

    MyFragment2.java

    package com.example.demo15;

    import android.annotation.SuppressLint;
    import android.app.Fragment;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;

    @SuppressLint("NewApi") public class MyFragment2 extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater,
    @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment,container,false);
    TextView text=(TextView) view.findViewById(R.id.text);
    text.setText("动态传值");
    return view;
    }
    }

    MyFragment3.java

    package com.example.demo15;

    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.Fragment;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;

    @SuppressLint("NewApi") public class MyFragment3 extends Fragment{
    private TextView tv;

    @Override
    public View onCreateView(LayoutInflater inflater,
    @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment2,container,false);
    TextView tv=(TextView) view.findViewById(R.id.text);
    tv.setText("第一个Fragment");
    Log.i("Main","Fragment1--onCreateView()");
    return view;
    }

    @Override
    public void onAttach(Activity activity) {
    super.onAttach(activity);
    Log.i("Main","Fragment1--onAttach()");
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("Main","Fragment1--onCreate()");
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Log.i("Main","Fragment1--onActivityCreated()");
    }

    @Override
    public void onStart() {
    super.onStart();
    Log.i("Main","Fragment1--onStart()");
    }

    @Override
    public void onResume() {
    super.onResume();
    Log.i("Main","Fragment1--onResume()");
    }

    @Override
    public void onPause() {
    super.onPause();
    Log.i("Main","Fragment1--onPause()");
    }

    @Override
    public void onStop() {
    super.onStop();
    Log.i("Main","Fragment1--onStop()");
    }

    @Override
    public void onDestroyView() {
    super.onDestroyView();
    Log.i("Main","Fragment1--onDestroyView()");
    }

    @Override
    public void onDestroy() {
    super.onDestroy();
    Log.i("Main","Fragment1--onDestroy()");
    }

    @Override
    public void onDetach() {
    super.onDetach();
    Log.i("Main","Fragment1--onDetach()");
    }
    }

    MyFragment4.java

    package com.example.demo15;

    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.Fragment;
    import android.os.Bundle;
    import android.support.annotation.Nullable;

    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;

    @SuppressLint("NewApi") public class MyFragment4 extends Fragment{
    private TextView tv;

    @Override
    public View onCreateView(LayoutInflater inflater,
    @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment2,container,false);
    TextView tv=(TextView) view.findViewById(R.id.text);
    tv.setText("第二个Fragment");
    Log.i("Main","Fragment2--onCreateView()");
    return view;
    }

    @Override
    public void onAttach(Activity activity) {
    super.onAttach(activity);
    Log.i("Main","Fragment2--onAttach()");
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("Main","Fragment2--onCreate()");
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Log.i("Main","Fragment2--onActivityCreated()");
    }

    @Override
    public void onStart() {
    super.onStart();
    Log.i("Main","Fragment2--onStart()");
    }

    @Override
    public void onResume() {
    super.onResume();
    Log.i("Main","Fragment2--onResume()");
    }

    @Override
    public void onPause() {
    super.onPause();
    Log.i("Main","Fragment2--onPause()");
    }

    @Override
    public void onStop() {
    super.onStop();
    Log.i("Main","Fragment2--onStop()");
    }

    @Override
    public void onDestroyView() {
    super.onDestroyView();
    Log.i("Main","Fragment2--onDestroyView()");
    }

    @Override
    public void onDestroy() {
    super.onDestroy();
    Log.i("Main","Fragment2--onDestroy()");
    }

    @Override
    public void onDetach() {
    super.onDetach();
    Log.i("Main","Fragment2--onDetach()");
    }
    }

    MyFragment5.java

    package com.example.demo15;

    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.Fragment;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    import android.widget.Toast;

    @SuppressLint("NewApi") public class MyFragment5 extends Fragment{
    private String code="Thank you,Activity";
    public MyListener listener;
    public interface MyListener{
    public void thank(String code);
    }

    @Override
    public void onAttach(Activity activity) {
    listener=(MyListener) activity;
    super.onAttach(activity);
    }

    @Override
    public View onCreateView(LayoutInflater inflater,
    @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment2,container,false);
    TextView tv=(TextView) view.findViewById(R.id.text);
    String text=getArguments().get("name")+"";
    tv.setText(text);
    Toast.makeText(getActivity(),"你好"+text,Toast.LENGTH_SHORT).show();
    Toast.makeText(getActivity(),code,Toast.LENGTH_SHORT).show();
    listener.thank(code);
    return view;
    }
    }

    布局文件:

    activity_main.xml

    <FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.demo15.MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/container"
    />

    fragment_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    />

    </RelativeLayout>

    fragment.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:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

    <Button
    android:text="改变"
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    />
    </LinearLayout>

    fragment2.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:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

    </LinearLayout>

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
    android:id="@+id/frame"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    ></LinearLayout>

    <RadioGroup
    android:id="@+id/radiogroup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:gravity="center_horizontal"
    android:orientation="horizontal"
    >

    <RadioButton
    android:id="@+id/first"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="@drawable/radio_pressed"
    android:button="@null"
    android:drawableTop="@drawable/ic_launcher"
    android:gravity="center_horizontal"
    android:text="静态加载"
    />
    <RadioButton
    android:id="@+id/second"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="@drawable/radio_pressed"
    android:button="@null"
    android:drawableTop="@drawable/ic_launcher"
    android:gravity="center_horizontal"
    android:text="动态加载"
    />
    <RadioButton
    android:id="@+id/thrid"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="@drawable/radio_pressed"
    android:button="@null"
    android:drawableTop="@drawable/ic_launcher"
    android:gravity="center_horizontal"
    android:text="生命周期"
    />
    <RadioButton
    android:id="@+id/fourth"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="@drawable/radio_pressed"
    android:button="@null"
    android:drawableTop="@drawable/ic_launcher"
    android:gravity="center_horizontal"
    android:text="传值通信"
    />

    </RadioGroup>

    </RelativeLayout>

    main2.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" >

    <fragment
    android:id="@+id/fragment"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:name="com.example.demo15.MyFragment"
    />
    </LinearLayout>

    main3.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
    android:text="切换Fragment"
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

    </LinearLayout>

    main4.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />

    <Button
    android:id="@+id/send"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="发送"
    />

    <fragment
    android:id="@+id/frag"
    android:name="com.example.demo15.MyFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
    </LinearLayout>

    配置文件:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.demo15"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

    <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <activity android:name="com.example.demo15.MainActivity2"></activity>
    <activity android:name="com.example.demo15.MainActivity3"></activity>
    <activity android:name="com.example.demo15.MainActivity4"></activity>
    </application>

    </manifest>

  • 相关阅读:
    C# 中的高性能计时器(Daniel Strigl著,野比译)(转)
    C#中SerialPort类 随笔
    迭代器
    枚举数与可枚举类型(笔记)
    jQuery的关注与学习
    敏捷开发的4句宣言 大数据
    bat脚本
    c++动态库中回调函数使用
    C++中遍历lua table
    vs2010编译release版本却依赖debug版本库msvcrd100.dll
  • 原文地址:https://www.cnblogs.com/daochong/p/4946215.html
Copyright © 2020-2023  润新知