Android:详情界面左右滑动看更多,ViewPager动态添加Fragment,仿51job详情界面
来源:互联网 发布:json测试工具 编辑:程序博客网 时间:2024/05/29 10:44
在项目中遇到一个需求:在邮件列表中任意一个进入邮件详情,在详情界面中,可以左右滑动查看上一条或下一条邮件详情。
界面简单,主要是实现效果
这时我们第一时间想到的就是ViewPager+Fragment,但是我的数据可能会有上百条,这就要考虑Fragment的回收问题,开始自己折腾了很久,后来网上查到了用FragmentStatePagerAdapter 代替 FragmentPagerAdapter,Android:FragmentStatePagerAdapter分页。这样实现起来非常简单切更可靠。具体实现看如下代码:
activity_main.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.support.v4.view.ViewPager android:id="@+id/vp_detail" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager></LinearLayout>
MainActivity.java
package com.hmy;import android.content.Context;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentStatePagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.Menu;import android.view.MenuItem;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private Context mContext; private ViewPager mViewPager; private DetailPagerAdapter mAdapter; private List<Integer> mList; private int TOTAL_SIZE = 26; private final int PAGE_SIZE = 10; private int mCount = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initView(); } private void initData() { mContext = this; mList = new ArrayList<>(); for (int i = 0; i < PAGE_SIZE; i++) { mCount++; mList.add(mCount); } } private void initView() { mViewPager = (ViewPager) findViewById(R.id.vp_detail); mAdapter = new DetailPagerAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mAdapter); mViewPager.addOnPageChangeListener(new OnFragmentPageChangeListener()); mViewPager.setCurrentItem(mList.size() / 2); } private class DetailPagerAdapter extends FragmentStatePagerAdapter { public DetailPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return DetailFragment.newInstance(position); } @Override public int getCount() { return mList == null ? 0 : mList.size(); } } private class OnFragmentPageChangeListener implements ViewPager.OnPageChangeListener { @Override public void onPageScrolled(int position, float offsetPerc, int offsetPixel) { } @Override public void onPageScrollStateChanged(int state) { } @Override public void onPageSelected(int position) { int size = mList.size(); if (position == size - 1 && TOTAL_SIZE > size) { //实际项目中是网络请求下一页的列表数据 getMoreDetailList(); } } } private void getMoreDetailList() { for (int i = mCount; i < TOTAL_SIZE; i++) { mCount++; mList.add(mCount); } mAdapter.notifyDataSetChanged(); }}
fragment_detail.xml
<FrameLayout 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"> <TextView android:id="@+id/tv_id" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="1" android:textSize="40sp" android:textStyle="bold" /></FrameLayout>
package com.hmy;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;public class DetailFragment extends Fragment { private TextView mIdTv; private static final String ARG_PARAM1 = "param1"; private int mParam1; public DetailFragment() { // Required empty public constructor } public static DetailFragment newInstance(int param1) { DetailFragment fragment = new DetailFragment(); Bundle args = new Bundle(); args.putInt(ARG_PARAM1, param1); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getInt(ARG_PARAM1); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_detail, container, false); mIdTv = (TextView) view.findViewById(R.id.tv_id); mIdTv.setText("-----" + mParam1 + "-----"); return view; }}
0 2
- Android:详情界面左右滑动看更多,ViewPager动态添加Fragment,仿51job详情界面
- android 仿天猫商品详情界面滑动效果
- 仿淘宝ViewPager左滑加载详情界面
- 仿淘宝Banner:左右滑动ViewPager+最后一张滑动查看详情
- Android 安卓 fragment+viewpager 仿qq界面 实现点击菜单切换界面+滑动切换viewpager切换界面
- fragment viewpager界面滑动
- 在ViewPager中使用Fragment实现界面左右滑动
- viewpager图片广告条点击转跳fragment-----【轮播图点击转跳详情界面】
- 仿蘑菇街,蜜芽宝贝,京东商品详情界面,与NestedScroll滑动
- 仿蘑菇街,蜜芽宝贝,京东商品详情界面,与NestedScroll滑动
- ViewPager+Fragment实现界面滑动
- ViewPager+Fragment滑动切换界面
- 【Android】viewpager+fragment实现界面滑动,顶部导航也滑动
- Android中仿淘宝商品详情ViewPager页面数据手动滑动
- android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能
- Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能
- android viewPager使用,实现界面的左右滑动
- fragment中添加ViewPager实现界面切换,动态添加radiobutton
- 《用Python玩转数据》第2周学习笔记(Part1)
- jQuery实现页面详情展开收起
- Log4j.properties文件配置详解及模板
- SVN 多项目配置 (shell 一键配置)
- Android仿Iphone通知角标的实现
- Android:详情界面左右滑动看更多,ViewPager动态添加Fragment,仿51job详情界面
- #Hostapd之main函数(2)
- 2015 Objective-C 新特性
- 理解RESTful架构
- Service和Thread,写的很好
- 如何在eclipse jee中创建Maven project并且转换为Dynamic web project
- ubuntu 14.04 chrome 的 flash 插件 安装
- 在wordpress上制作一款插件
- videoView用法