Android_横向滑动菜单, HorizontalScrollView,Fragment,Viewpager结合使用 +pullToRefreshListView

来源:互联网 发布:美工刀架规格 编辑:程序博客网 时间:2024/06/06 02:05

主页面 布局    

<?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.example.zhangt.myapplication.MainActivity">    <HorizontalScrollView        android:id="@+id/hs"        android:layout_width="match_parent"        android:layout_height="wrap_content">        <LinearLayout            android:id="@+id/linearlayout"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="horizontal">        </LinearLayout>    </HorizontalScrollView>    <android.support.v4.view.ViewPager        android:id="@+id/viewpager"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_below="@id/hs">    </android.support.v4.view.ViewPager></RelativeLayout>
//////////////////////////////////////////////////////////////
主页面
package com.example.zhangt.myapplication;import android.graphics.Color;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.view.ViewGroup;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private String[] titles;    private List<TextView> list;    private HorizontalScrollView hs;    private LinearLayout linearlayout;    private ViewPager viewpager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        hs = (HorizontalScrollView)findViewById(R.id.hs);        linearlayout = (LinearLayout)findViewById(R.id.linearlayout);        viewpager = (ViewPager)findViewById(R.id.viewpager);        //创建数组,存放标题        titles = new String[] { "头条", "娱乐", "科技", "信息", "八卦", "北京", "上海", "天津","重庆", "大大燕网" };        //创建集合,存放textview        list = new ArrayList<TextView>();        //创建textview        for (int i = 0; i < titles.length; i++) {            //创建textview            TextView textView = new TextView(MainActivity.this);            textView.setText(titles[i]);            textView.setTextSize(20);            textView.setId(i+1000);            //点击事件            textView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    int id = view.getId();                    viewpager.setCurrentItem(id-1000);                }            });            //刚进程序第一个默认红色,其他为黑色            if(i ==0){                textView.setTextColor(Color.RED);            }else {                textView.setTextColor(Color.BLACK);            }            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);            layoutParams.setMargins(20,10,20,10);            //添加到布局中            linearlayout.addView(textView,layoutParams);            //添加到集合            list.add(textView);        }        //为viewpager设置适配器        viewpager.setAdapter(new Myadapter(getSupportFragmentManager()));        //viewpager的监听        viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {            //滑动改变颜色            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                //list中存的是 textview                for (int i = 0; i < list.size(); i++) {                    if(position==i){                        list.get(i).setTextColor(Color.RED);                    }else{                        list.get(i).setTextColor(Color.BLACK);                    }                }                //获取当前的textview                TextView textView = list.get(position);                //width是每次滑动的距离                int width = textView.getWidth()+10;                //让scrollView滑动   滑动距离是textview之间的间距                hs.scrollTo(width*position,0);            }            @Override            public void onPageSelected(int position) {            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    class Myadapter extends FragmentPagerAdapter {        public Myadapter(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int position) {            return Fragment1.getinstance(list.get(position).getText().toString());        }        @Override        public int getCount() {            return list.size();        }    }}
////////////////////////////////////
Fragment1 yemian 
package com.example.zhangt.myapplication;import android.os.Bundle;import android.os.Handler;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import com.example.zhangt.myapplication.Bean.Result;import com.example.zhangt.myapplication.Utils.MyTask;import com.google.gson.Gson;import com.handmark.pulltorefresh.library.ILoadingLayout;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import java.util.ArrayList;import java.util.List;/** * Created by Zhang.T on 2017/12/3. */public class Fragment1 extends Fragment{    private adapter adapter;    private int pageIndex=5;    private List<Result.DataBean> datas=new ArrayList<>();    private Handler myHandler=new Handler();    private PullToRefreshListView pullToRefreshListView;    public static Fragment getinstance(String title){        //创建Fragment1        Fragment1 fragment1 = new Fragment1();        //创建bundle        Bundle bundle = new Bundle();        //添加值        bundle.putString("title",title);        //把值添加到Arguments中        fragment1.setArguments(bundle);        return fragment1;    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.one, null);        pullToRefreshListView= view.findViewById(R.id.pull_lv);        return view;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        initLv();        initData();    }    public void initLv(){        //设置刷新模式 ,both代表支持上拉和下拉,pull_from_end代表上拉,pull_from_start代表下拉        pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);/*这里通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别,第一个true 代表下来状态 ,第二个true 代表上拉的状态如果想区分上拉和下拉状态的不同,可以分别设置*/        ILoadingLayout startLabels = pullToRefreshListView.getLoadingLayoutProxy(true, false);        startLabels.setPullLabel("下拉刷新");        startLabels.setRefreshingLabel("正在拉");        startLabels.setReleaseLabel("放开刷新");        ILoadingLayout endLabels = pullToRefreshListView.getLoadingLayoutProxy(false, true);        endLabels.setPullLabel("上拉刷新");        endLabels.setRefreshingLabel("正在载入...");        endLabels.setReleaseLabel("放开刷新...");/*如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。  如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。  当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法,Mode.PULL_FROM_END的时候只调用onPullUpToRefresh()方法.  加载数据完成后 必须 调用下 onRefreshComplete() 完成关闭 header,footer视图*/        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {            @Override            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {//下拉刷新的回调                //下拉刷新的数据,显示在listview列表的最上面                    addtoTop();                myHandler.postDelayed(new Runnable() {                    @Override                    public void run() {                        //刷新完成,必须在异步下完成                        pullToRefreshListView.onRefreshComplete();                        //刷新适配器                        setAdapter();                    }                },1000);            }            @Override            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {//上拉加载的回调                //加载更多的数据,添加到集合列表的最后面                addtoBottom();                myHandler.postDelayed(new Runnable() {                    @Override                    public void run() {                        //刷新完成,必须在异步下完成                        pullToRefreshListView.onRefreshComplete();                        //刷新适配器                        setAdapter();                    }                },1000);            }        });    }    public void initData(){        MyTask myTask=new MyTask(new MyTask.Icallbacks() {            @Override            public void updateUiByjson(String jsonstr) {                Gson gson=new Gson();                Result result = gson.fromJson(jsonstr, Result.class);                List<Result.DataBean> data = result.getData();                datas.addAll(data);                //添加到大集合对象中                //设置适配器                setAdapter();            }        });        myTask.execute("http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1");    }    public void addtoTop(){        MyTask myTask=new MyTask(new MyTask.Icallbacks() {            @Override            public void updateUiByjson(String jsonstr) {                Gson gson=new Gson();                Result result = gson.fromJson(jsonstr, Result.class);                List<Result.DataBean> data = result.getData();                datas.addAll(data);                //设置适配器                setAdapter();            }        });        myTask.execute("http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+pageIndex);    }    public void addtoBottom(){        pageIndex++;        MyTask myTask=new MyTask(new MyTask.Icallbacks() {            @Override            public void updateUiByjson(String jsonstr) {                Gson gson=new Gson();                Result result = gson.fromJson(jsonstr, Result.class);                List<Result.DataBean> data = result.getData();                datas.addAll(data);                //设置适配器                setAdapter();            }        });        myTask.execute("http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+pageIndex);    }    public void setAdapter(){        if(adapter==null){            adapter=new adapter();            pullToRefreshListView.setAdapter(adapter);        }else{            adapter.notifyDataSetChanged();        }    }    class  adapter extends BaseAdapter {        @Override        public int getCount() {            return datas.size();        }        @Override        public Object getItem(int position) {            return datas.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            Viewholder holder;            if (convertView==null) {                convertView=View.inflate(getActivity(),R.layout.lv_one,null);                holder=new Viewholder();                holder.one=convertView.findViewById(R.id.textView);                convertView.setTag(holder);            }else {                holder=(Viewholder) convertView.getTag();            }            holder.one.setText(datas.get(position).getTitle());            return convertView;        }    }    ////////////////////////////    class Viewholder{        TextView one ,two;    }}

阅读全文
0 0
原创粉丝点击