Android中fragment+viewpager实现布局

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

1.先布局实现mian.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
  tools:context="com.bwei.fragment.MainActivity"> 

  <android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" /> 

  <RadioGroup
    android:id="@+id/radioGroup1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/pager"
    android:layout_centerHorizontal="true"
    android:orientation="horizontal"
    android:background="#ccc"
    > 

    <RadioButton
      android:id="@+id/radio0"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:checked="true"
      android:button="@null"
      android:layout_weight="1"
      android:text="微信"
      android:drawableTop="@mipmap/ic_launcher_round"
      android:gravity="center"
      /> 

    <RadioButton
      android:id="@+id/radio1"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:button="@null"
      android:layout_weight="1"
      android:text="通讯录"
      android:drawableTop="@mipmap/ic_launcher_round"
      android:gravity="center"
      /> 

    <RadioButton
      android:id="@+id/radio2"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:button="@null"
      android:layout_weight="1"
      android:text="发现"
      android:drawableTop="@mipmap/ic_launcher_round"
      android:gravity="center" />
    <RadioButton
      android:id="@+id/radio3"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:button="@null"
      android:layout_weight="1"
      android:text="我的"
      android:drawableTop="@mipmap/ic_launcher_round"
      android:gravity="center"/>
  </RadioGroup>
</RelativeLayout>

2.创建3个fragment 要继承Fragment类v4包下的

public class FragmentThree extends Fragment {
  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     //引入布局文件
    View view = inflater.inflate(R.layout.fragmentthree, null);
    return view;
  }
}

3.创建fragment 相对应的布局文件

<?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:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="230dp"
    android:text="one" />
</RelativeLayout>

4.创建适配器继承FragmentPagerAdapter

package com.bwei.fragment; 

import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter; 

import java.util.List; 

public class MyAdapter extends FragmentPagerAdapter {
  private List<Fragment> fragments;
  private Context context;
  //构造方法
  public MyAdapter(FragmentManager fm, List<Fragment> fragments, Context context) {
    super(fm);
    this.fragments = fragments;
    this.context = context;
  }
  //得到item条目
  @Override
  public Fragment getItem(int position) {
    return fragments.get(position);
  } 

  //得到数量
  @Override
  public int getCount() {
    return fragments.size();
  }
}

5.在mainActivity实现效果

package com.bwei.fragment; 

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast; 

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

public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener,ViewPager.OnPageChangeListener { 

  private ViewPager vPager;
  private List<Fragment> fragments;
  private FragmentManager fm;
  private RadioGroup mRadioGroup;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //初始化控件
    initView();
    initDate();
  } 

  private void initView() {
    vPager=(ViewPager) findViewById(R.id.pager);
    vPager.setOnPageChangeListener(this);
    mRadioGroup=(RadioGroup) findViewById(R.id.radioGroup1);
    mRadioGroup.setOnCheckedChangeListener(this);
  } 

  private void initDate() {
    fragments=new ArrayList<Fragment>();
    //实例化Fragment
    FragmentOne fragmentOne = new FragmentOne();
    FragmentTwo fragmentTwo = new FragmentTwo();
    FragmentThree fragmentThree = new FragmentThree(); 

    //添加到集合
    fragments.add(fragmentOne);
    fragments.add(fragmentTwo);
    fragments.add(fragmentThree); 

    //得到getSupportFragmentManager()的管理器
    fm = getSupportFragmentManager();
    //得到适配器
    MyAdapter myAdapter = new MyAdapter(fm, fragments, this);
    //设置适配器
    vPager.setAdapter(myAdapter);
  } 

  //ViewPager.OnPageChangeListener监听事件
  @Override
  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

  } 

  @Override
  public void onPageSelected(int position) { 

    for (int i = 0; i <fragments.size() ; i++) {
      RadioButton radiobutton = (RadioButton) mRadioGroup.getChildAt(i);
      if (i==position) {
        radiobutton.setChecked(true);
        //设置选中的颜色
        radiobutton.setBackgroundColor(Color.RED);
      }else {
        radiobutton.setChecked(false);
        radiobutton.setBackgroundColor(Color.BLACK);
        radiobutton.setBackgroundColor(Color.BLACK);
      }
    }
  } 

  @Override
  public void onPageScrollStateChanged(int state) { 

  } 

  //RadioGroup的监听事件 

  @Override
  public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) { 

    for (int j = 0; j <fragments.size() ; j++) {
      //得到radiobutton
      RadioButton radiobutton = (RadioButton) mRadioGroup.getChildAt(j);
      int id = radiobutton.getId();
      Toast.makeText(this,id+"", Toast.LENGTH_SHORT).show();
      //判断radiobutton的id是否等于选中的id
      if (radiobutton.getId()==i) {
        //设置当前页
        vPager.setCurrentItem(j);
      }
    }
  }
}

6.最后的效果图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)

    Android现在实现Tab类型的界面方式越来越多,今天就把常见的实现方式给大家来个总结.目前写了: 1.传统的ViewPager实现 2.FragmentManager+Fragment实现 3.ViewPager+FragmentPagerAdapter实现 4.TabPageIndicator+ViewPager+FragmentPagerAdapter 1.传统的ViewPager实现 主要就是ViewPager+ViewAdapter这个还是比较常见的,就不多说了 效果图: 代码: p

  • Android中fragment+viewpager实现布局

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 1.先布局实现mian.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/

  • 详解Android中fragment和viewpager的那点事儿

    在之前的博文<Android 中使用 ViewPager实现屏幕页面切换和页面轮播效果>和<详解Android中Fragment的两种创建方式>以及<Android中fragment与activity之间的交互(两种实现方式)>中我们介绍了ViewPager以及Fragment各自的使用场景以及不同的实现方式. 那如果将他们两结合起来,会不会擦出点火花呢,答案是肯定的.之前在介绍ViewPager时,我们实现了多个ImageView的切换,并配合更新导航原点的状态.那我

  • Android 中使用 ViewPager实现屏幕页面切换和页面轮播效果

    之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpager有自己的adapter,这也让其适应复杂对象,实现数据的动态加载. ViewPager是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一,利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等. 下面我们就展示下Vie

  • Android 中 Fragment的使用大全

    Fragment必须总是被嵌入到一个Activity中,并且它的生命周期直接受宿主Activity生命周期的影响. 本文内容可以分为下面的几部分: 使用支持库 创建一个Fragment 创建一个动态UI 多个Fragment之间的通信 在一个Activity中,一个Fragment代表一种行为或者用户界面的一部分.你可以联合起来多个Fragment在一个Activity中创建多面板的UI,并且可以重用一个Fragment在多个activity中.你可以认为一个Fragment是一个Activit

  • Android中fragment与activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<详解Android中Fragment的两种创建方式>,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何实现数据交互的. 我们可以这样理解,宿主Activity中的Fragment之间要实现信息交互,就必须通过宿主Activity,Fragment之间是不可能直接实现信息交互的. Fragmen

  • Android中Fragment的基本用法示例总结

    前言 fragment 可认为是一个轻量级的Activity,但不同与Activity,它是要嵌到Activity中来使用的,它用来解决设备屏幕大小的不同,主要是充分利用界面上的空间,如平板上多余的空间.一个Activity可以插入多个Fragment,可以认为Fragment就是Activity上的一个View. 本文主要介绍了关于Android中Fragment的基本用法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.fragment管理 在activity动态加载f

  • Android 中Fragment与Activity通讯的详解

    Android 中Fragment与Activity通讯的详解 与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例. Fragment可以调用getActivity()方法很容易的得到它所在的activity的对象,然后就可以查找activity中的控件们(findViewById()). 例如: ViewlistView =getActivity().findView

  • Android 中RecyclerView多种item布局的写法(头布局+脚布局)

    RecyclerView多个item布局的写法(头布局+脚布局) 上图 github 下载源码 Initial commit第一次提交的代码,为本文内容 以下的为主要代码,看注释即可,比较简单 MainActivity 含上拉加载更多 package com.anew.recyclerviewall; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivi

  • 探究Android中ListView复用导致布局错乱的解决方案

    首先来说一下具体的需求是什么样的: 需求如图所示,这里面有ABCD四个选项的题目,当点击A选项,如果A是正确的答案,则变成对勾的图案,如果是错误答案,则变成错误的图案,这里当时在写的时候觉得很简单,只要是在点击的时候判断我点击的选项与正确答案是否一样,是一样就将图片换成正确的样式,如果不一样就换成错误的样式,于是我便写了下面的代码(只贴出了核心Adapter中的代码) package com.fizzer.anbangproject_dahuo_test.Adapter; import andr

  • Android中TabLayout+ViewPager 简单实现app底部Tab导航栏

    前言 在谷歌发布Android Design Support Library之前,app底部tab布局的实现方法就有很多种,其中有RadioGroup+FrameLayout.TabHost+Fragment.FragmentPagerAdapter+ViewPager等方法,虽然这些方法虽然能达到同样的效果,但我个人总觉得有些繁琐.然而,Google在2015的IO大会上,给开发者们带来了全新的Android Design Support Library,里面包含了许多新控件,这些新控件有许多

随机推荐