仿今日头条里的横行滑动里的Fragment刷新


//1.上一个页面的值{这是一个Fragment里面写的横向滑动{
//(1.0.TabLayout的用法是在点击项目按F4进入结构设计2.点击上面的Dependencies,点击上面的加号并添加自带的依赖com.android.support:design:28.0.0-alpha1)
    注意需要看你Studio的版本 默认是28.0.0 需要修改build里的implementation 'com.android.support:design:26.+'我的是26版本};
public class main2fr02 extends Fragment {
    private ArrayList<fruser> frusers;
    private TabLayout tab;
    private ViewPager vp;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.main2fr02, container, false);
        vp = view.findViewById(R.id.mainfr02_vp);
        tab = view.findViewById(R.id.mainfr02_tab);
        return view;
    }
//http://api.tianapi.com/?/?key=8ec324bf03d34f7706fb4c35a4355d7e&num=10&page=2
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        chu();
        tu tu = new tu(getChildFragmentManager());
        vp.setAdapter(tu);
        tab.setupWithViewPager(vp);
    }
//TabLayout的适配器
    class tu extends FragmentPagerAdapter
    {

        public tu(FragmentManager fm) {
            super(fm);
        }
    //手动写的方法
        @Override
        public CharSequence getPageTitle(int position) {
            return frusers.get(position).getUser();
        }

        @Override
        public Fragment getItem(int position) {
    //展示并传值
            main202fr01 main202fr01 = new main202fr01();
            Bundle bundle = new Bundle();
            bundle.putString("geturl1",frusers.get(position).getUrl());
            main202fr01.setArguments(bundle);
            return main202fr01;
        }

        @Override
        public int getCount() {
            return frusers.size();
        }
    }
//需要传的值
    private void chu() {
        frusers = new ArrayList<>();
        frusers.add(new fruser("社会新闻","social"));
        frusers.add(new fruser("VR科技","vr"));
        frusers.add(new fruser("IT资讯","it"));
        frusers.add(new fruser("娱乐新闻","huabian"));
        frusers.add(new fruser("体育新闻","tiyu"));
        frusers.add(new fruser("NBA新闻","nba"));
        frusers.add(new fruser("足球新闻","football"));
        frusers.add(new fruser("科技新闻","keji"));
        frusers.add(new fruser("创业新闻","startup"));
        frusers.add(new fruser("苹果新闻","apple"));
        frusers.add(new fruser("美女图片","meinv"));
        frusers.add(new fruser("军事新闻","military"));
        frusers.add(new fruser("移动互联","mobile"));
        frusers.add(new fruser("旅游资讯","travel"));
        frusers.add(new fruser("健康知识","health"));
        frusers.add(new fruser("奇闻异事","qiwen"));
    }
//1.1TabLayout这个碎片的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical">

    <android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/mainfr02_tab"
        app:tabGravity="center"
        app:tabIndicatorColor="#00f"
        app:tabMode="scrollable"
        app:tabSelectedTextColor="@color/colorPrimaryDark"
        app:tabTextColor="@color/colorPrimary"></android.support.design.widget.TabLayout>
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/mainfr02_vp"
        ></android.support.v4.view.ViewPager>
</LinearLayout>
//2.1 横行滑动里的数值(我的有轮播图和里面的小圆点下面是listview)先是主页面的值  这里上下拉刷新用的是mpulltorefresh  导的是第三封依赖需要的Q我  具体方法再说

public class main202fr01 extends Fragment {


    private ArrayList<user.NewslistBean> arrayList;
    private ListView lv;
    private String geturl1;
    private String url;
    private int shu;
    private int shu01;
    private PullToRefreshScrollView pull;
    private ViewPager vp;
    private ArrayList<String> data;
    private LinearLayout xiaoyuandian;
    private ArrayList<ImageView> imageViews;
//handler里面的小圆点和图片的自动播放
    private Handler handler=new Handler()
    {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int cindex=vp.getCurrentItem();
            cindex++;
            //设置当前页面
            vp.setCurrentItem(cindex);
            //调用方法
            sele(cindex%imageViews.size());
            //再次发送消息
            sendEmptyMessageDelayed(1,1000);
        }
    };
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.main202fr01, container, false);
//获得布局和控件
        lv = view.findViewById(R.id.main202fr01_lv);
        pull = view.findViewById(R.id.pull);
//获取上一个页面传的值
        Bundle arguments = getArguments();
        geturl1 = arguments.getString("geturl1");
//shu是页面的页数 shu01在用于是否清空数据
        shu = 1;
        shu01 = 1;
        url = "http://api.tianapi.com/"+ geturl1 +"/?key=8ec324bf03d34f7706fb4c35a4355d7e&num=10&page="+ shu;
        arrayList = new ArrayList<>();

        vp = view.findViewById(R.id.main202fr01_vp);
        data = new ArrayList<>();
        xiaoyuandian = view.findViewById(R.id.xioayuandian);
        imageViews = new ArrayList<>();
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
//运行方法
        new tu().execute(url);
        shua();
//这是轮播图的点击移动停止松手在动
        vp.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction())
                {
                    case MotionEvent.ACTION_DOWN:
                        //移除所有的消息,不再自动轮播
                        handler.removeCallbacksAndMessages(null);
                        break;
                    case MotionEvent.ACTION_MOVE:
                        handler.removeCallbacksAndMessages(null);
                        break;
                    case MotionEvent.ACTION_UP:
                        //再次发送消息
                        handler.sendEmptyMessageDelayed(1,1000);
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        //再次发送消息
                        handler.sendEmptyMessageDelayed(1,1000);
                        break;
                }
                return false;
            }
        });
    }
//小圆点的判定方法
    public void sele(int page)
    {
        for (int i = 0; i < imageViews.size(); i++) {
            if (page==i)
            {
                imageViews.get(i).setImageResource(R.drawable.xiaoyuanxuan);
            }else
            {
                imageViews.get(i).setImageResource(R.drawable.xiaoyuannoxuan);
            }
        }
    }
//上下拉刷新
    private void shua() {
        pull.setMode(PullToRefreshBase.Mode.BOTH);
        pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                shu = 1;
                shu01 = 2;
                url = "http://api.tianapi.com/"+ geturl1 +"/?key=8ec324bf03d34f7706fb4c35a4355d7e&num=10&page="+ shu;
                new tu().execute(url);
                handler.removeMessages(1);
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                shu ++;
                shu01 = 1;
                url = "http://api.tianapi.com/"+ geturl1 +"/?key=8ec324bf03d34f7706fb4c35a4355d7e&num=10&page="+ shu;
                new tu().execute(url);
                handler.removeMessages(1);
            }
        });
    }  
//异步解析json串用的是HttpURLConnection 的方法   Gson是需要dao包的那种

    class  tu extends AsyncTask<String,Void,String>
{

    @Override
    protected String doInBackground(String... strings) {
        try {
            URL url = new URL(main202fr01.this.url);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setReadTimeout(5000);
            urlConnection.setConnectTimeout(5000);
            urlConnection.setRequestMethod("GET");
            int responseCode = urlConnection.getResponseCode();
            if (responseCode==200)
            {
                InputStream inputStream = urlConnection.getInputStream();
                String zhuan = zhuan(inputStream);
                return zhuan;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        Gson gson = new Gson();
        user user01 = gson.fromJson(s, user.class);
        List<user.NewslistBean> newslist = user01.getNewslist();
       //给viewpage添加图片  记得加清空每次上下拉都会运行添加的方法
    data.clear();
        for (int i = 0; i < newslist.size(); i++) {
            data.add(newslist.get(i).getPicUrl());
        }
    //下拉刷新时清空
        if (shu01==2)
        {
            arrayList.clear();
        }
        arrayList.addAll(newslist);
    //这是listview的适配器  等下下面会加
        main202myada main202myada = new main202myada(getActivity(), arrayList);
        lv.setAdapter(main202myada);
    //小圆点随着图片的数量  小圆点我是shap手绘的
        imageViews.clear();
        xiaoyuandian.removeAllViews();
        for (int i = 0; i <data.size() ; i++) {
            ImageView imageView = new ImageView(getActivity());
    //给小圆点设置右边的间隔
            LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
            params.setMargins(0,0,10,0);
         //  
    if (i==0)
            {
                imageView.setImageResource(R.drawable.xiaoyuanxuan);
            }else
            {
                imageView.setImageResource(R.drawable.xiaoyuannoxuan);
            }
            imageViews.add(imageView);
            xiaoyuandian.addView(imageView,params);
        }
    //运行handler
        handler.sendEmptyMessageDelayed(1,1000);

        vp.setCurrentItem(imageViews.size()*10);
    //viewpage的适配器
        myada202imagemyada myada202imagemyada = new myada202imagemyada(getActivity(),data);
        vp.setAdapter(myada202imagemyada);
        pull.onRefreshComplete();
    }
}
//把字节流转为字符流
public String zhuan(InputStream inputStream)
{
    StringBuilder builder = new StringBuilder();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
    String string;
    try {
        while((string=bufferedReader.readLine())!=null)
        {
            builder.append(string);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return builder.toString();

}
//2.2横行滑动里的数值  布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:ptr="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical">
   <com.handmark.pulltorefresh.library.PullToRefreshScrollView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/pull"
       ptr:ptrDrawable="@drawable/default_ptr_flip"
       ptr:ptrAnimationStyle="flip"
       ptr:ptrHeaderBackground="#383838"
       ptr:ptrHeaderTextColor="#FFFFFF"
       >
       <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:orientation="vertical"
           >
           <FrameLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content">
               <android.support.v4.view.ViewPager
                   android:layout_width="match_parent"
                   android:layout_height="200dp"
                   android:id="@+id/main202fr01_vp"
                   ></android.support.v4.view.ViewPager>
               <LinearLayout
                   android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:id="@+id/xioayuandian"
                   android:layout_gravity="bottom"
                   android:orientation="horizontal"
                   android:gravity="center"
                   ></LinearLayout>
           </FrameLayout>
           <com.example.yuekaomoni.bean.mylist
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:id="@+id/main202fr01_lv"
               ></com.example.yuekaomoni.bean.mylist>
       </LinearLayout>
   </com.handmark.pulltorefresh.library.PullToRefreshScrollView>
</LinearLayout>
//2.3viewpage的适配器myada202imagemyada
public class myada202imagemyada extends PagerAdapter {
    Context context;
    ArrayList<String> data;
    private final DisplayImageOptions options;
    public myada202imagemyada(Context context, ArrayList<String> data) {
        this.context = context;
        this.data = data;

        options = new DisplayImageOptions.Builder()
                .cacheInMemory(true)//使用内存缓存
                .cacheOnDisk(true)//使用磁盘缓存
                .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
                .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式 1px=2字节
                .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式
                .build();
    }


    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = new ImageView(context);
        ImageLoader.getInstance().displayImage(data.get(position%data.size()),imageView,options);
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
       container.removeView((View) object);
    }

}

//效果图






猜你喜欢

转载自blog.csdn.net/wumeng5211314/article/details/80091982