Android 中 Fragment 的基本使用

Android 中 Fragment 的基本使用,第1张

概述Android中Fragment的基本使用1.基础了解2.了解使用3.传递参数4.Fragment和Activity的通信1.基础了解Fragment有自己的生命周期Fragment依赖于ActivityFragment通过getActivity()可以获取所在的Activity;Activity通过FragmentManager的f

AndroID 中 Fragment 的基本使用1. 基础了解2. 了解使用3. 传递参数4. Fragment 和 Activity 的通信

1. 基础了解

Fragment 有自己的生命周期

Fragment 依赖于 Activity

Fragment 通过 getActivity() 可以获取所在的 Activity; Activity 通过 FragmentManager 的 findFragmentByID()
或 findFragmentByTag() 获取 Fragment

Fragment 和 Activity 是多对多的关系

2. 了解使用

Activity 嵌一个 Fragment, 点击按钮切换另一个.

ContainerActivity 文件

package com.example.hello.fragment;import androIDx.appcompat.app.AppCompatActivity;import androIDx.fragment.app.Fragment;import androID.os.Bundle;import androID.Widget.button;import com.example.hello.R;public class ContainerActivity extends AppCompatActivity {    private AFragment aFragment;    private BFragment bFragment;    private button btnChange;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_container);        btnChange = findVIEwByID(R.ID.btn_change_fragment);        btnChange.setonClickListener(v -> {            // 切换            if (bFragment == null) {                bFragment = new BFragment();            }            // 防止实例            Fragment fragment = getSupportFragmentManager().findFragmentByTag("a");            if (fragment != null) {                getSupportFragmentManager().beginTransaction().hIDe(fragment).add(R.ID.content_fragment, bFragment).addToBackStack(null).commitAllowingStateLoss();            } else {                getSupportFragmentManager().beginTransaction().replace(R.ID.content_fragment, bFragment).addToBackStack(null).commitAllowingStateLoss();            }        });        // 实例化        aFragment = new AFragment("参数");        // 将 aFragment 放入到 Activity 中        getSupportFragmentManager().beginTransaction().add(R.ID.content_fragment, aFragment, "a").commitAllowingStateLoss();    }}

activity_container.xml

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:app="http://schemas.androID.com/apk/res-auto"    xmlns:tools="http://schemas.androID.com/tools"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:orIEntation="vertical"    androID:padding="15dp"    tools:context=".fragment.ContainerActivity">    <button        androID:ID="@+ID/btn_change_fragment"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:text="@string/changeFragment" />    <FrameLayout        androID:ID="@+ID/content_fragment"        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent" /></linearLayout>

AFragment

package com.example.hello.fragment;import androID.os.Bundle;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.TextVIEw;import androIDx.annotation.NonNull;import androIDx.annotation.Nullable;import androIDx.fragment.app.Fragment;import com.example.hello.R;public class AFragment extends Fragment {    private TextVIEw tvA;    @Nullable    @OverrIDe    public VIEw onCreateVIEw(@NonNull LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) {        super.onCreateVIEw(inflater, container, savedInstanceState);        return inflater.inflate(R.layout.fragment_a, container, false);    }    @OverrIDe    public voID onVIEwCreated(@NonNull VIEw vIEw, @Nullable Bundle savedInstanceState) {        super.onVIEwCreated(vIEw, savedInstanceState);        tvA = vIEw.findVIEwByID(R.ID.fragment_tv);    }}
<?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"    androID:padding="15dp">    <TextVIEw        androID:ID="@+ID/fragment_tv"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:gravity="center"        androID:text="@string/fragmentA"        androID:textcolor="@color/black"        androID:textSize="20sp" /></linearLayout>

BFragment

package com.example.hello.fragment;import androID.os.Bundle;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.TextVIEw;import androIDx.annotation.NonNull;import androIDx.annotation.Nullable;import androIDx.fragment.app.Fragment;import com.example.hello.R;public class BFragment extends Fragment {    private TextVIEw tvB;    @Nullable    @OverrIDe    public VIEw onCreateVIEw(@NonNull LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) {        super.onCreateVIEw(inflater, container, savedInstanceState);        return inflater.inflate(R.layout.fragment_b, container, false);    }    @OverrIDe    public voID onVIEwCreated(@NonNull VIEw vIEw, @Nullable Bundle savedInstanceState) {        super.onVIEwCreated(vIEw, savedInstanceState);        tvB = vIEw.findVIEwByID(R.ID.fragment_tv);            }}
<?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"    androID:padding="15dp">    <TextVIEw        androID:ID="@+ID/fragment_tv"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:gravity="center"        androID:text="@string/fragmentB"        androID:textcolor="@color/black"        androID:textSize="20sp" /></linearLayout>


3. 传递参数

向 Fragment 传递参数.
新版本的可以用构造函数.

        // 实例化        aFragment = new AFragment("参数");

AFragment

package com.example.hello.fragment;import androID.content.Context;import androID.os.Bundle;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.TextVIEw;import androIDx.annotation.NonNull;import androIDx.annotation.Nullable;import androIDx.fragment.app.Fragment;import com.example.hello.R;public class AFragment extends Fragment {    private TextVIEw tvA;    private String Title;    public AFragment(String Title) {        this.Title = Title;    }    public AFragment() {    }    @Nullable    @OverrIDe    public VIEw onCreateVIEw(@NonNull LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) {        super.onCreateVIEw(inflater, container, savedInstanceState);        return inflater.inflate(R.layout.fragment_a, container, false);    }    @OverrIDe    public voID onVIEwCreated(@NonNull VIEw vIEw, @Nullable Bundle savedInstanceState) {        super.onVIEwCreated(vIEw, savedInstanceState);        tvA = vIEw.findVIEwByID(R.ID.fragment_tv);        if (Title != null) {            tvA.setText(Title);        }    }    @OverrIDe    public voID onAttach(@NonNull Context context) {        super.onAttach(context);    }    @OverrIDe    public voID onDetach() {        super.onDetach();    }}

4. Fragment 和 Activity 的通信

AFragment 文件

package com.example.hello.fragment;import androID.content.Context;import androID.os.Bundle;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.button;import androID.Widget.TextVIEw;import androIDx.annotation.NonNull;import androIDx.annotation.Nullable;import androIDx.fragment.app.Fragment;import com.example.hello.R;public class AFragment extends Fragment {    private TextVIEw tvA;    private button btnChangeContent;    private String Title;    private ChangeContent changeContent;    public AFragment(String Title) {        this.Title = Title;    }    public AFragment() {    }    @Nullable    @OverrIDe    public VIEw onCreateVIEw(@NonNull LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) {        super.onCreateVIEw(inflater, container, savedInstanceState);        return inflater.inflate(R.layout.fragment_a, container, false);    }    @OverrIDe    public voID onVIEwCreated(@NonNull VIEw vIEw, @Nullable Bundle savedInstanceState) {        super.onVIEwCreated(vIEw, savedInstanceState);        tvA = vIEw.findVIEwByID(R.ID.fragment_tv);        if (Title != null) {            tvA.setText(Title);        }        btnChangeContent = vIEw.findVIEwByID(R.ID.btn_change_content);        btnChangeContent.setonClickListener(v -> {            changeContent.setContent("改变的内容");        });    }    @OverrIDe    public voID onAttach(@NonNull Context context) {        super.onAttach(context);        try {            // 没有实现该接口会报错            changeContent = (ChangeContent) context;        } catch (Exception e) {            e.printstacktrace();        }    }    @OverrIDe    public voID onDetach() {        super.onDetach();    }    /**     * 通信     */    public interface ChangeContent {        voID setContent(String Title);    }}

fragment_a.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"    androID:padding="15dp">    <button        androID:ID="@+ID/btn_change_content"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:text="@string/changeContent" />    <TextVIEw        androID:ID="@+ID/fragment_tv"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:gravity="center"        androID:text="@string/fragmentA"        androID:textcolor="@color/black"        androID:textSize="20sp" /></linearLayout>

ContainerActivity 文件实现 AFragment 中接口进行通信.

package com.example.hello.fragment;import androIDx.appcompat.app.AppCompatActivity;import androIDx.fragment.app.Fragment;import androID.os.Bundle;import androID.Widget.button;import com.example.hello.R;public class ContainerActivity extends AppCompatActivity implements AFragment.ChangeContent {    private AFragment aFragment;    private BFragment bFragment;    private button btnChange;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_container);        btnChange = findVIEwByID(R.ID.btn_change_fragment);        btnChange.setonClickListener(v -> {            // 切换            if (bFragment == null) {                bFragment = new BFragment();            }            // 防止实例            Fragment fragment = getSupportFragmentManager().findFragmentByTag("a");            if (fragment != null) {                getSupportFragmentManager().beginTransaction().hIDe(fragment).add(R.ID.content_fragment, bFragment).addToBackStack(null).commitAllowingStateLoss();            } else {                getSupportFragmentManager().beginTransaction().replace(R.ID.content_fragment, bFragment).addToBackStack(null).commitAllowingStateLoss();            }        });        // 实例化        aFragment = new AFragment("参数");        // 将 aFragment 放入到 Activity 中        getSupportFragmentManager().beginTransaction().add(R.ID.content_fragment, aFragment, "a").commitAllowingStateLoss();    }    /**     * 改变内容     *     * @param Title 内容     */    @OverrIDe    public voID setContent(String Title) {        btnChange.setText(Title);    }}

总结

以上是内存溢出为你收集整理的Android 中 Fragment 的基本使用全部内容,希望文章能够帮你解决Android 中 Fragment 的基本使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1044675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存