Android 简单易理解的ViewPager嵌套Fragment展示页面滑动效果

本文介绍了一种常见的App设计模式——Fragment与ViewPager的结合使用。通过这种方式可以实现页面间的平滑切换,尤其适用于电商等需要展示多个分类场景的应用。文中提供了具体的XML布局文件及Java代码示例,帮助开发者快速上手。

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

可以说这个控件在现在的app当中经常用到,简单实用,就是fragment与viewpager结合,在这里fragmetn相当于viewpager的一哥滚动页面,有了viewpager的帮助,fragmetn也可以滚动了,这样的功能经常运用在一些电商项目当中。

activity_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.fragment_demo.MainActivity" >


    <LinearLayout
        android:id="@+id/mLine"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal" >
        <Button
            android:id="@+id/mBtn1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="fragmenthome" />
        <Button
            android:id="@+id/mBtn2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="fragmentmy" />
    </LinearLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/mLine_Fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/mLine"
        android:orientation="vertical" />

</RelativeLayout>

fragmenthome

<?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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是 1"
        />

</LinearLayout>

fragmentmy

<?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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是 2"

        />
</LinearLayout>

MainActivity

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends FragmentActivity implements OnClickListener {
    private FragmentHome home;
    private FragmentMy my;
    private Button mBtn1,mBtn2;
    private LinearLayout mline_fragment;
    private FragmentManager manager;
    private MyAdapter adapter;
    private List<Fragment> list;
    private ViewPager mVp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
    private void initView() {
        my=new FragmentMy();
        home=new FragmentHome();
        mBtn1=(Button) findViewById(R.id.mBtn1);
        mBtn2=(Button) findViewById(R.id.mBtn2);
        mVp=(ViewPager) findViewById(R.id.mLine_Fragment);
        mBtn1.setOnClickListener(this);
        mBtn2.setOnClickListener(this);
        list=new ArrayList<Fragment>();
        list.add(my);
        list.add(home);
        adapter=new MyAdapter(getSupportFragmentManager(), list);
        mVp.setAdapter(adapter);
    }
    @Override
    public void onClick(View v) {
        int ID = v.getId();
        switch (ID) {
            case R.id.mBtn1:
//获取焦点下标
                mVp.setCurrentItem(0, false);
                break;

            case R.id.mBtn2:
                mVp.setCurrentItem(1,false);
                break;
        }

    }
}

MyAdapter

import java.util.ArrayList;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MyAdapter extends FragmentPagerAdapter{
    private List<Fragment> list=new ArrayList<Fragment>();
    private FragmentManager manager;

    public MyAdapter(FragmentManager fm,List<Fragment> list) {
        super(fm);
        this.list=list;
// TODO Auto-generated constructor stub
    }
    @Override
    public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
        return list.get(arg0);
    }
    @Override
    public int getCount() {
// TODO Auto-generated method stub
        return list.size();
    }

}

FragmentHome

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentMy extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragmentmy, null);
        return view;
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值