Android-Fragment碎片-片段



Fragment 是从Android3.0以后出现的新技术,今天我们就用Fragment+Viewpager做一个模仿微信的demo,现在基本不管哪个Android项目都会用到Fragment,所以Fragment就变得很重要,所以就仔细将这边博文看了


基本大家也都了解Fragment的原理,这个demo需要用到以下文件

没个Fragment都需要一个xml文件,也就是xx_fragment.xml,也有对应的Java文件,但命名就要规范XXFragment.java(不需要到AndroidManifest.xml中配置)

还有Viewpager需要用到一个xml,activity_main.xml,这个xml文件用到了一个RadioGroup(单选组)

java文件为MainActivity.java(需要到AndroidManifest.xml(一般默认生成,其他新建的Activity需要手动配置))




上面提到了需要的文件,

xx_fragment.xml(模仿微信发现页面    (其他类似就不一一贴上了))

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

    <TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="发现"
    android:background="#0000ff"
    />


</LinearLayout>

XXFragment.java


package com.example.android_10text;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;--这个是重点在继承Fragment到这个包,导其他的包会报错
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by Administrator on 2017/6/15 0015.
 */

public class FindFragment extends Fragment{

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v=inflater.inflate(R.layout.fragment_find,null);
        return v;
    }
}

activity_main.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:orientation="vertical"
    android:layout_height="match_parent" tools:context="com.example.android_10text.MainActivity">

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3"
        android:id="@+id/vp_main_view"
        >

    </android.support.v4.view.ViewPager>


    <RadioGroup
        android:id="@+id/rg_main_group"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#D4D4D4"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/rb_main_rg_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:button="@null"
            android:drawableTop="@drawable/selector_radiobutton"
            android:checked="true"
            android:gravity="center"
            android:text="微信"
            android:textSize="20sp"
            />


        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:button="@null"
            android:drawableTop="@drawable/selector_radiobutton"
            android:gravity="center"
            android:text="通讯录"
            android:textSize="20sp"
            android:id="@+id/rb_main_rg_2"/>


        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:button="@null"
            android:drawableTop="@drawable/selector_radiobutton"
            android:gravity="center"
            android:text="发现"
            android:textSize="20sp"
            android:id="@+id/rb_main_rg_3"
            />


        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:button="@null"
            android:drawableTop="@drawable/selector_radiobutton"
            android:gravity="center"
            android:text="我"
            android:textSize="20sp"
            android:id="@+id/rb_main_rg_4"
            />


    </RadioGroup>


</LinearLayout>

MainActivity.java代码如下,


package com.example.android_10text;

import android.support.annotation.IdRes;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ViewPager vp_main_view;//viewpager控件
    private List<Fragment> fragments=new ArrayList<>();//碎片集合
    private RadioGroup rg_main_group;//单选组
    private List<View> buttons;//单选框集合


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //拿viewpager控件
       vp_main_view = (ViewPager) findViewById(R.id.vp_main_view);
        //拿到单选组
       rg_main_group = (RadioGroup) findViewById(R.id.rg_main_group);

        //将每个碎片拿到
        WeixinFragment weixinFragment=new WeixinFragment();
        FindFragment findFragment=new FindFragment();
        MeFragment meFragment=new MeFragment();
        TxlFragment txlFragment=new TxlFragment();


        //放进碎片集合中
        fragments.add(weixinFragment);
        fragments.add(findFragment);
        fragments.add(txlFragment);
        fragments.add(meFragment);
        

        //设置自己写的适配器
        vp_main_view.setAdapter(new MyAdapter(getSupportFragmentManager()));

        //将当前页面获取焦点的单选框放入单选框集合中
        buttons = rg_main_group.getTouchables();

        //给Viewpager设置左右滑动监听
        vp_main_view.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }
            
            //当前选择的页面
            @Override
            public void onPageSelected(int position) {
                //通过页面来改变下面单选框的状态,跟随页面滑动变化而变化
               RadioButton radioButton= (RadioButton) buttons.get(position);
                radioButton.setChecked(true);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });


        //给单选组设置选择监听
        rg_main_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
                //一共4个单选框,每个单选框都设置ID,判断checkid(当前获取焦点的单选框的id)是否等于下面的ID,
                //如果等于就改变Viewpager中的碎片,从而做到点击一个按钮改变一个页面
               if(checkedId==R.id.rb_main_rg_1){
                    vp_main_view.setCurrentItem(0);
                }else if(checkedId==R.id.rb_main_rg_2){
                    vp_main_view.setCurrentItem(1);
                }else if(checkedId==R.id.rb_main_rg_3){
                    vp_main_view.setCurrentItem(2);
                }else if(checkedId==R.id.rb_main_rg_4){
                    vp_main_view.setCurrentItem(3);

                }
            }
        });

    }


    //自定义的Fragment的专属适配器
    class  MyAdapter extends FragmentPagerAdapter{


        public MyAdapter(FragmentManager fragmentManager){
            super(fragmentManager);
        }


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

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


}

当这些步骤走下来,demo也就能运行出来,本来还想贴一张gif动图来展示demo效果,但是不会制作gif动图,有会制gif动图的小伙伴联系我,本人微信,15115984212












































1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值