Android课程——fragment的使用(一)

本文介绍了Android中Fragment的基本概念和使用方法,包括静态和动态加载方式。重点讲解了Fragment的动态加载过程,涉及MainActivity与Fragment的交互,以及在布局中添加和管理Fragment。此外,还探讨了Fragment与ViewPager的配合使用,实现页面滑动和点击切换的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Android初级课程中,对fragment的认识仅限于是一个碎片,在高级课程第一课中,便深入认识fragment。下面我简单谈一下学习fragment之后对于fragment的认识。

1、fragment简介

什么是fragment?使用fragment有什么好处?

fragment是一个可以将activity拆分成几个完全独立封装的可重用的组件。基于android系统的设备越来越多,分辨率种类越来越多,Google提出fragment的概念是希望通过fragment设计的布局可以动态、灵活的解决不同屏幕分辨率的适配问题。使用fragment可以在activity中实现不同界面的灵活切换。

2、如何使用fragment?
fragment的静态加载

步骤:
1、创建MainActivity、AFragment和BFragment,由于我的代码是十分简单的静态fragment,所以在MainActivity里没有写语句,只在layout里把布局语句写好了。

代码展示:

  <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="100dp" 
        android:text="这是一个界面"
        android:textSize="30sp"
        android:gravity="center"
        />
    <FrameLayout
        android:layout_below="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b6b6b6"
        >
    </FrameLayout>
fragment的动态加载
  • 新建类继承fragment
  • 重写OnCreateView方法
  • 使用LayoutInflater对象中的inflate方法绑定布局和控件
  • 在Activity对应的布局文件中通过标签引用

简单举例:在主页左边有两个按钮,按其中一个右边出现相对应要显示的内容。

步骤:
1、首先创建一个MainActivity和两个fragment(AFragment、BFragment),在fragment的布局文件layout里面填充内容,把onCreateView方法重写一下。

代码演示:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view=inflater.inflate(R.layout.fragment_b, container, false);
        return view;
    }

2、第二步写MainActivity里面layout的布局,创建两个Button按钮和一个fragment标签。
代码演示:

<LinearLayout
    android:layout_width="100dp"
    android:orientation="vertical"
    android:layout_height="match_parent">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="女装"
        android:id="@+id/nvbut"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="男装"
        android:id="@+id/nanbut"
        />
</LinearLayout>

    <FrameLayout
        android:id="@+id/shop"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </FrameLayout>

3、最后一步就是在activity里面写java代码。在这一部分中大部分内容都是在Android基础中学过的,创建对象,绑定id,创建监听事件等,当然也有很重要的新的知识点。比如:

  • 管理Activity中的Fragment需要使用FragmentManger,调用Activity中的getFragmentManager()方法获得。
  • Fragment事务对象,对Fragment进行添加、移除、替换、提交等操作对象,常用方法有:这里写图片描述
  • commit方法:当所有的准备工作完成后,必须调用commit方法才能执行和生效。

代码演示:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button nvbut;
    private Button nanbut;
    private Fragment nanzhuang;
    private Fragment nvzhuang;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ID();
    }

    private void ID() {
        nvbut=findViewById(R.id.nvbut);
        nanbut=findViewById(R.id.nanbut);
        nvbut.setOnClickListener(this);
        nanbut.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
       FragmentManager manager=getFragmentManager();//创建FragmentManger对象
       FragmentTransaction transaction=manager.beginTransaction();//创建FragmentTransaction对象
        switch (v.getId()){
            case R.id.nanbut:
                if(nanzhuang==null){
                    nanzhuang=new BFragment();
                }
                transaction.replace(R.id.shop,nanzhuang);
                break;
            case R.id.nvbut:
                if(nvzhuang==null)
                {
                    nvzhuang=new AFragment();
                    transaction.replace(R.id.shop,nvzhuang);

                }
                break;
                default:
                    break;
        }
        transaction.commit();//最后一步提交
    }
}

效果图:
这里写图片描述

注意

代码敲到这里一个简单的动态Fragment就写的差不多了,但我要提醒一个很容易报错的地方,在fragment导包的过程中要注意包的统一。fragment的包有两种:

import android.app.Fragment;
import android.support.v4.app.Fragment;

如果布局文件中不含有ViewPager的话,尽量使用上面app的那个包,如果需要使用ViewPager则需要使用下面的那个包,因为ViewPager的包和fragment配套的话只有一种。

3、ViewPager和Fragment配套使用

ViewPager和Fragment一起使用时,可以更好的实现页面的滑动,所以在学习时着重练习这部分。

简单举例:在主页面下方有三个按钮,上面是页卡滑动,既可以实现左右滑动也可以点击按钮实现页面跳转。

步骤:
1、和上面所说的fragment动态加载步骤差不多,不同的是多创建一个适配器暂且命名为MypagerAdapter。主页面的layout中的fragment标签换成ViewPager,以便可以滑动。
layout部分代码演示:

 <android.support.v4.view.ViewPager
        android:layout_above="@+id/wx_btn"
        android:id="@+id/wx_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v4.view.ViewPager>
    <LinearLayout
        android:id="@+id/wx_btn"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="消息"
            android:textSize="20sp"
            android:id="@+id/wx_messagebtn"
            />
        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="朋友圈"
            android:textSize="20sp"
            android:id="@+id/wx_frindsbtn"
            />
        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="动态"
            android:textSize="20sp"
            android:id="@+id/wx_newsbtn"
            />
    </LinearLayout>

2、布局文件写好之后就是适配器部分了,让适配器继承一个类FragmentPagerAdapter,定义一个数组,重写它的四个方法,代码如下:

public class MypagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> mfragmentList;

    public MypagerAdapter(FragmentManager fm,List<Fragment> fragmentList) {
        super(fm);
        this.mfragmentList=fragmentList;
    }

    @Override
    public Fragment getItem(int position) {
        return mfragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mfragmentList.size();
    }
}

3、最后一部分就是Activity部分的java代码,实现页面的滑动以及点击按钮切换页面。代码如下:

public class WxActivity extends AppCompatActivity implements View.OnClickListener{
    private Button messbtn;
    private Button frindsbtn;
    private Button newsbtn;

    private Fragment messFragment;
    private Fragment frindsFragment;
    private Fragment newsFragment;

    private ViewPager viewPager;

    private List<Fragment> fragmentList= new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wx);
        ID();
        messFragment=new MessageFragment();
        frindsFragment=new FrindsFragment();
        newsFragment=new NewsFragment();

        //添加数据
        fragmentList.add(messFragment);
        fragmentList.add(frindsFragment);
        fragmentList.add(newsFragment);

        //创建适配器
        MypagerAdapter adapter=new MypagerAdapter(getSupportFragmentManager(),fragmentList);
        //绑定适配器
        viewPager.setAdapter(adapter);
    }

    private void ID() {
        messbtn=findViewById(R.id.wx_messagebtn);
        frindsbtn=findViewById(R.id.wx_frindsbtn);
        newsbtn=findViewById(R.id.wx_newsbtn);
        viewPager=findViewById(R.id.wx_pager);
        messbtn.setOnClickListener(this);
        frindsbtn.setOnClickListener(this);
        newsbtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.wx_messagebtn:
                viewPager.setCurrentItem(0);
                break;
            case  R.id.wx_frindsbtn:
                viewPager.setCurrentItem(1);

                break;
            case R.id.wx_newsbtn:
                viewPager.setCurrentItem(2);

                break;
                default:
                    break;
        }
    }
}

效果图:
这里写图片描述

学习Android到现在,什么多敲代码之类的话就不多说了,现在学习遇到的主要问题是在导入包时是不是前后匹配,不匹配的话是肯定会报错的,而且错误一般很难找,所以下次代码报错找不到错误时,可以看看是否是导包的过程出现事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值