TabLayout横向滑动,DrawerLayout侧滑,PullToRefreshListView上拉刷新下拉加载联用

来源:互联网 发布:电力系统仿真软件综述 编辑:程序博客网 时间:2024/05/20 21:45

Activity

public class MainActivity extends AppCompatActivity {   ViewPager vp_ma; //ViewPager    LbUtils Lu;//数据请求的包    LbBean lb; //LbBean包    LbApdata lbApdata; //轮播图的适配器    List<ImageView> list; //用于存放轮播图的图片额集合    List<LbBean.NewslistBean> list1; //轮播图的bena包    private List<ImageView> imagesList;  //用于存放小圆点的集合    LinearLayout  linearLayout;  //小园点的布局控件    Button bt_ma; //Button按钮用于实现跳转    //handler机制        //用于实现无限轮播            private Handler handler = new Handler(){                public void handleMessage(Message msg) {                    //获取当前条目                    int index = vp_ma.getCurrentItem();                    //向右轮播                    vp_ma.setCurrentItem(index+=1);                    //间隔2秒                    handler.sendEmptyMessageDelayed(1,1000);//轮播图轮播的速度                };            };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //找控件        vp_ma = (ViewPager) findViewById(R.id.vp_ma);        linearLayout = (LinearLayout) findViewById(R.id.linearLayout);        bt_ma = (Button) findViewById(R.id.bt_ma);        getBeanByGson();        //viewPager页面改变的监听事件  小圆点的监听        vp_ma.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                //如果选中了这一页,,,当前小圆点红色,,,否则绿色                for (int i = 0;i<imagesList.size();i++){                    if (i== position%imagesList.size()){                        imagesList.get(i).setImageResource(R.drawable.doc_select);                    }else {                        imagesList.get(i).setImageResource(R.drawable.doc_select_no);                    }                }            }            @Override            public void onPageScrollStateChanged(int state) {            }        });        //给Button一个点击事件  用于跳转        bt_ma.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intent = new Intent(MainActivity.this,Activity.class);                startActivity(intent);            }        });    }    //轮播图的解析    public void getBeanByGson() {        // 使用该方法得到了一个 Json的字符输入流        new AsyncTask<String, String, String>() {            @Override            protected String doInBackground(String... strings) {                String reader = LbUtils.getNetDataStr();                return reader;            }            @Override            protected void onPostExecute(String s) {                super.onPostExecute(s);                // 使用Gson把该字符输入流转换成JavaBean                Gson gson = new Gson();                lb = gson.fromJson(s, LbBean.class);                list = new ArrayList<ImageView>();                list1 = new ArrayList<>();                list1.addAll(lb.getNewslist());                for (int i = 0; i < list1.size(); i++) {                    ImageView imageView = new ImageView(MainActivity.this);                    imageView.setScaleType(ImageView.ScaleType.FIT_XY);                    ImageLoader.getInstance().displayImage(list1.get(i).getPicUrl(), imageView);                    list.add(imageView);                }                initDoc();                lbApdata = new LbApdata(list);                vp_ma.setAdapter(lbApdata);                handler.sendEmptyMessageDelayed(1, 1000);//轮播图轮播的速度            }        }.execute();    }    private void initDoc() {        //首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置        imagesList = new ArrayList<>();        linearLayout.removeAllViews();//清空/移除所有的view        for (int i = 0;i<list.size();i++){            ImageView imageView = new ImageView(MainActivity.this);            if (i==0){//显示第一页,,,红的                imageView.setImageResource(R.drawable.doc_select);            }else {//绿的                imageView.setImageResource(R.drawable.doc_select_no);            }            //添加到集合            imagesList.add(imageView);            //加入到线性布局中显示            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);            params.setMargins(5,0,5,0);//这是小圆点间距            linearLayout.addView(imageView,params);//把小圆点存放到布局中        }    }}
Activity布局
<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"    tools:context="com.example.yuekaolx.MainActivity">  <android.support.v4.view.ViewPager      android:id="@+id/vp_ma"      android:layout_width="match_parent"      android:layout_height="match_parent">  </android.support.v4.view.ViewPager>  <LinearLayout      android:id="@+id/linearLayout"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_alignBottom="@+id/vp_ma"      android:layout_centerHorizontal="true"      android:layout_marginBottom="20dp"      android:orientation="horizontal">  </LinearLayout>  <Button      android:id="@+id/bt_ma"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:text="进入主界面"      android:layout_alignParentBottom="true"      android:layout_alignParentRight="true"      android:layout_alignParentEnd="true" /></RelativeLayout>

跳转后页面 TabLayout
public class Activity extends AppCompatActivity {    TabLayout tab; //横向布局    ViewPager vp_ac;//ViewPage    List<String> listStr; //用于存放添加Fragment的结合    List<Fragment> listTv;//用于存放Fragment的集合    private ListView lv; //侧滑的控件    private DrawerLayout drawerLayout; //侧滑    List<PullBean.ResultBean.ListBean> lsit;  //PuiiBean的结合    PullBean Pb;  //PullBean包    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_);        //找控件        tab = (TabLayout) findViewById(R.id.tab);        vp_ac = (ViewPager) findViewById(R.id.vp_ac);        ListView lv = (ListView) findViewById(R.id.lv);        //侧滑的集合        List<String> list = new ArrayList<>();        //给侧滑页面添加数据        list.add("数据1");        list.add("数据2");        list.add("数据3");        //侧滑的适配器       ArrayAdapter<String> array = new ArrayAdapter<String>(Activity.this,               android.R.layout.simple_list_item_1, list);        lv.setAdapter(array);        init(); //侧滑的数据调用        //TabLayout的横向布局  添加数据        listStr = new ArrayList();        listStr.add("美女");        listStr.add("段子");        listStr.add("社会");        listStr.add("汽车");        listStr.add("博客");        listStr.add("前端");        listStr.add("公司");        listStr.add("资讯");        listStr.add("视频");        listStr.add("文学");        listTv = new ArrayList<>();        for (int i = 0; i < 10; i++) {            listTv.add(new NewsFragment(listStr.get(i)));        }        vp_ac.setAdapter(new MyAdapter(getSupportFragmentManager()));        //ViewpAge的预加载解决方法        vp_ac.setOffscreenPageLimit(listTv.size());        //TabLayout和ViewPage进行联动        tab.setupWithViewPager(vp_ac);    }    //ViewPage的适配器    class MyAdapter extends FragmentPagerAdapter {        public MyAdapter(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int position) {            return listTv.get(position);        }        @Override        public int getCount() {            return listTv.size();        }        @Override        public CharSequence getPageTitle(int position) {            return listStr.get(position);        }    }    //侧滑    private void init() {        drawerLayout = (DrawerLayout) findViewById(R.id.mydraw);        lv = (ListView) findViewById(R.id.lv);        //点击lv的条目,关闭侧滑,在主界面显示相关详细        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                drawerLayout.closeDrawer(lv);//关闭侧滑                //改变主界面                String str = parent.getItemAtPosition(position).toString();            }        });    }}

TabLayout布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:app="http://schemas.android.com/apk/res-auto"    tools:context="com.example.yuekaolx.Activity">    <android.support.design.widget.TabLayout        android:id="@+id/tab"        android:layout_width="match_parent"        android:layout_height="wrap_content"        app:tabGravity="center"        app:tabIndicatorColor="@color/colorAccent"        app:tabMode="scrollable"        app:tabSelectedTextColor="@color/colorPrimaryDark"        app:tabTextColor="@color/colorPrimary"        >    </android.support.design.widget.TabLayout>    <android.support.v4.widget.DrawerLayout        xmlns:android="http://schemas.android.com/apk/res/android"        android:id="@+id/mydraw"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@color/colorAccent"        >        <android.support.v4.view.ViewPager            android:id="@+id/vp_ac"            android:layout_below="@+id/tab"            android:layout_width="match_parent"            android:layout_height="match_parent">        </android.support.v4.view.ViewPager>        <ListView            android:id="@+id/lv"            android:layout_width="240sp"            android:layout_height="match_parent"            android:layout_gravity="start"            android:choiceMode="singleChoice"            android:divider="#f00"            android:dividerHeight="1dp"            android:background="#fff"            />    </android.support.v4.widget.DrawerLayout>    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        /></LinearLayout>

TabLyout的Fragment数据
public class NewsFragment extends Fragment {    PullToRefreshListView refresh_list_view;  //用于实现上拉刷新下拉加载    List<PullBean.ResultBean.ListBean> list = new ArrayList<>(); //上拉刷新下拉啊加载的结合    boolean boo;    int NUM=1; //实现刷新的时候可以加载更多和刷新不同的数据    LbUtils lb; //数据的请求包    PullBean PB; //PullBean包    MyApdata myApdata;  //适配器    ListView  lv;    public NewsFragment(String s) {    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,                             @Nullable Bundle savedInstanceState) {        //找布局        View view = View.inflate(getActivity(),R.layout.fragment,null);        //找控件         refresh_list_view = view.findViewById(R.id.refresh_list_view);        //设置打开文件方式        refresh_list_view.setMode(PullToRefreshBase.Mode.BOTH);        lv = view.findViewById(R.id.lv);        return view;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        //这用于实现上拉刷新下拉加载        ILoadingLayout startLabels = refresh_list_view                .getLoadingLayoutProxy(true, false);        startLabels.setPullLabel("下拉刷新");        startLabels.setRefreshingLabel("正在拉");        startLabels.setReleaseLabel("放开刷新");        ILoadingLayout endLabels = refresh_list_view.getLoadingLayoutProxy( false, true);        endLabels.setPullLabel("上拉刷新");        endLabels.setRefreshingLabel("正在载入...");        endLabels.setReleaseLabel("放开刷新...");        ListGson();        //PullToRefreshListView给他一个监听用于监听上拉还是下拉        refresh_list_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {            @Override            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {                NUM++;               boo = true;                ListGson();            }            @Override            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {              NUM++;               boo = false;                ListGson();            }        });  }    //异步请求数据    public void ListGson(){        new AsyncTask<String,String,String>(){            @Override            protected String doInBackground(String... strings) {                String read = LbUtils.getNetData();                return read;            }            @Override            protected void onPostExecute(String result) {                super.onPostExecute(result);                Gson gson = new Gson();                PullBean PB = gson.fromJson(result, PullBean.class);                list.addAll(0,PB.getResult().getList());//把数据存放到集合中                setAdapter(list);//发送集合                refresh_list_view.onRefreshComplete();            }        }.execute();    }    //给适配器做判断    public void setAdapter(List<PullBean.ResultBean.ListBean> list){        if(myApdata == null){            myApdata = new MyApdata(list,getActivity());            refresh_list_view.setAdapter(myApdata);        }else{            myApdata.notifyDataSetChanged();        }    }}

布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <com.handmark.pulltorefresh.library.PullToRefreshListView        xmlns:ptr="http://schemas.android.com/apk/res-auto"        android:layout_height="match_parent"        android:layout_width="match_parent"        android:id="@+id/refresh_list_view"        ptr:ptrDrawable="@drawable/default_ptr_flip"        ptr:ptrAnimationStyle="flip"        ptr:ptrHeaderBackground="#383838"        ptr:ptrHeaderTextColor="#FFFFFF"  >    </com.handmark.pulltorefresh.library.PullToRefreshListView></LinearLayout>

轮播适配器
//轮播图的适配器public class LbApdata extends PagerAdapter{    List<ImageView> list = new ArrayList<>();    public LbApdata(List<ImageView> list) {        this.list = list;    }    @Override    public int getCount() {        return Integer.MAX_VALUE;//Integer.MAX_VALUE可实现无限轮播    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;//固定的    }    @Override    public Object instantiateItem(ViewGroup container, int position) {        position %= list.size();        container.addView(list.get(position));        return list.get(position);    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        container.removeView((View) object);    }}
PullToRefreshListView适配器

public class MyApdata extends BaseAdapter {    //构造参数    List<PullBean.ResultBean.ListBean> list;    //创建上下文    Context context;    public MyApdata(List<PullBean.ResultBean.ListBean> list, Context context) {        this.list = list;        this.context = context;    }    //有几个条目类型    @Override    public int getViewTypeCount() {        return 2;    }    //判断怎样分辨每个条目的位置    @Override    public int getItemViewType(int position) {        if(position%2==0){            return 0;        }else{            return 1;        }    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int i) {        return list.get(i);    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        ViewHolder holder=null;        ViewHolder2 holder2 = null;        int type = getItemViewType(i);        //进行多条目的判断        switch (type){            //如果为0,则是第一种布局            case 0:                if(view==null){                    view=View.inflate(context,R.layout.itme_one,null);                    holder=new ViewHolder();                    holder.iv_one= (ImageView) view.findViewById(R.id.iv_one);                    holder.tv_one= (TextView) view.findViewById(R.id.tv_one);                    view.setTag(holder);                }else{                    holder= (ViewHolder) view.getTag();                }                holder.tv_one.setText(list.get(i).getTitle());                ImageLoader.getInstance().displayImage(list.get(i).getFirstImg(),holder.iv_one);                break;            //如果为1,则是第二种布局            case 1:                if(view==null){                    view=View.inflate(context,R.layout.itme_two,null);                    holder2=new ViewHolder2();                    holder2.tv_two= (TextView) view.findViewById(R.id.tv_two);                    view.setTag(holder2);                }else{                    holder2= (ViewHolder2) view.getTag();                }                holder2.tv_two.setText(list.get(i).getTitle());                break;        }        DisplayImageOptions build = new DisplayImageOptions.Builder()                .cacheInMemory(true)                .cacheOnDisk(true)                .showImageForEmptyUri(R.mipmap.ic_launcher)                .showImageOnFail(R.mipmap.ic_launcher)                .showImageOnLoading(R.mipmap.ic_launcher)                .build();        return view;    }    //优化XlistView    class ViewHolder{        ImageView iv_one;        TextView tv_one;    }    class ViewHolder2{        TextView tv_two ;      }}

数据请求包
public class LbUtils {        //无限轮播的数据请求        public static String getNetDataStr() {            String json = null;            try {                URL url = new URL(                        "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10");                HttpURLConnection conn = (HttpURLConnection) url.openConnection();                conn.setRequestMethod("GET");                int code = conn.getResponseCode();                if (code == 200) {                    InputStream is = conn.getInputStream();                    ByteArrayOutputStream bos = new ByteArrayOutputStream();                    int len = -1;                    byte[] buff = new byte[1024];                    while((len = is.read(buff)) != -1){                        bos.write(buff,0,len);                    }                    json = new String(bos.toByteArray());                }            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            return json;        }//上拉刷新下拉加载的数据请求    public static String getNetData() {        try {            URL url = new URL(                    "http://v.juhe.cn/weixin/query?key=88f7bbc507e3ecacfaeab2b47dd8936f");            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            //设置            conn.setRequestMethod("GET");            conn.setReadTimeout(5000);            conn.setConnectTimeout(5000);            int code = conn.getResponseCode();            if (code == 200) {                InputStream is = conn.getInputStream();                ByteArrayOutputStream bos = new ByteArrayOutputStream();                int len = -1;                byte[] buff = new byte[1024];                while((len = is.read(buff)) != -1){                    bos.write(buff,0,len);                }                String json = new String(bos.toByteArray());                return json;            }        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return "";    }    }
温馨提示:联网权限,读取权限,第三方架包,清单文件配置。

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