横向滑动菜单Tablayout和viewpager小圆点结合滑动仿今日头条

来源:互联网 发布:阿里云备案在哪里 编辑:程序博客网 时间:2024/06/07 15:05

使用Tablayout前需要添加依赖design.25.3.1

<?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"    xmlns:app="http://schemas.android.com/apk/res-auto">    <android.support.design.widget.TabLayout        android:layout_width="match_parent"        android:layout_height="60dp"        android:id="@+id/tab_layout"        app:tabGravity="center"        app:tabMode="scrollable"        app:tabIndicatorColor="#ff0000"        app:tabTextColor="#000000"        app:tabSelectedTextColor="#ff0000"        app:tabTextAppearance="@style/tablayout_textsize"        ></android.support.design.widget.TabLayout>    <android.support.v4.view.ViewPager        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/fragNews_viewpager"        ></android.support.v4.view.ViewPager></LinearLayout>

代码里面 ,,点击tablayout 给另一个Fragment传值

public class Fragment_News extends Fragment{    private ViewPager viewPager;    private TabLayout tabLayout;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_news, container, false);        viewPager = (ViewPager) view.findViewById(R.id.fragNews_viewpager);        tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);        return view;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        final List<String> listtab = new ArrayList<>();        //福利、AndroidiOS、休息视频、拓展资源、前端、all        listtab.add("福利");        listtab.add("Android");        listtab.add("iOS");        listtab.add("休息视频");        listtab.add("拓展资源");        listtab.add("前端");        listtab.add("all");        //设置适配器,设置tablayout标题        viewPager.setOffscreenPageLimit(listtab.size());        viewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {            @Override            public CharSequence getPageTitle(int position) {                return listtab.get(position);            }            @Override            public Fragment getItem(int position) {                Fragment_news_frag fragment_news_frag = new Fragment_news_frag();                Bundle bundle = new Bundle();                bundle.putString("type",listtab.get(position));                fragment_news_frag.setArguments(bundle);                return fragment_news_frag;            }            @Override            public int getCount() {                return listtab.size();            }        });  
      //tablayoutviewpager 联动
  tabLayout.setupWithViewPager(viewPager); }}  
另一个Fragment的布局,,,使用 PullToRefreshListView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    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>


展示数据的fragment的代码,,接收 tablayout传来的参数,访问网络

public class Fragment_news_frag extends Fragment{    List<DBean.ResultsBean> list = new ArrayList<>();    int num=1;    String type;    String encode;    private PullListAdapter pullListAdapter;    private PullToRefreshListView refreshListView;    private ILoadingLayout startLabels;    private ILoadingLayout endLabels;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_news_frag, container, false);        refreshListView = (PullToRefreshListView) view.findViewById(R.id.refresh_list_view);        return view;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        Bundle bundle = getArguments();        type = bundle.getString("type", "福利");        //转码        try {            encode = URLEncoder.encode(type, "utf-8");        } catch (Exception e) {            e.printStackTrace();        }        getData();        //设置模式        refreshListView.setMode(PullToRefreshBase.Mode.BOTH);        startLabels = refreshListView.getLoadingLayoutProxy(true, false);        startLabels.setPullLabel("下拉刷新");        startLabels.setRefreshingLabel("正在拉");        startLabels.setReleaseLabel("放开刷新");        endLabels = refreshListView.getLoadingLayoutProxy(false, true);        endLabels.setPullLabel("上拉刷新");        endLabels.setRefreshingLabel("正在载入...");        endLabels.setReleaseLabel("放开刷新...");        //设置监听        refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {            @Override            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {                num++;               getDataRefresh();            }            @Override            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {                num=1;                getData();            }        });    }    private void getData() {        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {            @Override            protected String doInBackground(Void... params) {                String path="http://gank.io/api/data/"+encode+"/10/"+num;                try {                    URL url = new URL(path);                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setConnectTimeout(5000);                    connection.setReadTimeout(5000);                    int responseCode = connection.getResponseCode();                    if (responseCode==200){                        InputStream inputStream = connection.getInputStream();                        String json = streamtoString(inputStream,"utf-8");                        Thread.sleep(1500);                        return json;                    }                } catch (Exception e) {                    e.printStackTrace();                }                return "";            }            @Override            protected void onPostExecute(String json) {                Gson gson = new Gson();                DBean dBean = gson.fromJson(json, DBean.class);                if (dBean!=null && dBean.getResults()!=null) {                    list.addAll(dBean.getResults());                    long currentTimeMillis = System.currentTimeMillis();                    Date date2= new Date(currentTimeMillis);                    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");                    String format = dateFormat.format(date2);                    //设置刷新的时间                    endLabels.setLastUpdatedLabel(format);                    //停止刷新                    refreshListView.onRefreshComplete();                    setAdapter();                }            }        };        asyncTask.execute();    }    private void getDataRefresh() {        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {            @Override            protected String doInBackground(Void... params) {                String path="http://gank.io/api/data/"+encode+"/10/"+num;                try {                    URL url = new URL(path);                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setConnectTimeout(5000);                    connection.setReadTimeout(5000);                    int responseCode = connection.getResponseCode();                    if (responseCode==200){                        InputStream inputStream = connection.getInputStream();                        String json = streamtoString(inputStream,"utf-8");                        Thread.sleep(1500);                        return json;                    }                } catch (Exception e) {                    e.printStackTrace();                }                return "";            }            @Override            protected void onPostExecute(String json) {                Gson gson = new Gson();                DBean dBean = gson.fromJson(json, DBean.class);                if (dBean!=null && dBean.getResults()!=null) {                    list.addAll(0,dBean.getResults());                    long currentTimeMillis = System.currentTimeMillis();                    Date date2= new Date(currentTimeMillis);                    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");                    String format = dateFormat.format(date2);                    //设置刷新的时间                    startLabels.setLastUpdatedLabel(format);                    //停止刷新                    refreshListView.onRefreshComplete();                    setAdapter();                }            }        };        asyncTask.execute();    }    private void setAdapter() {        if (pullListAdapter==null) {            pullListAdapter = new PullListAdapter(list,getActivity());            refreshListView.setAdapter(pullListAdapter);        }else{           pullListAdapter.notifyDataSetChanged();        }    }    public static String streamtoString(InputStream inputStream, String charset) {        try {            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);            StringBuilder builder = new StringBuilder();            String s = null;            while((s = bufferedReader.readLine())!=null){                builder.append(s);            }            bufferedReader.close();;            return builder.toString();        } catch (Exception e) {            e.printStackTrace();        }        return null;    }}

下拉刷新上拉加载的PullToRefreshListView的适配器

public class PullListAdapter extends BaseAdapter{    int IMAGE = 0;    int TEXT = 1;    List<DBean.ResultsBean> list;    Context context;    public PullListAdapter(List<DBean.ResultsBean> list, Context context) {        this.list = list;        this.context = context;    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int position) {        return list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public int getViewTypeCount() {        return 2;    }    @Override    public int getItemViewType(int position) {        if (list.get(position).getImages()!=null){            return IMAGE;        }        return TEXT;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        if (getItemViewType(position)==IMAGE){            //如果返回IMAGE            ImageHolder holder;            if (convertView==null){                convertView = View.inflate(context, R.layout.pull_item2,null);                holder = new ImageHolder();                holder.imageView = (ImageView) convertView.findViewById(R.id.pull_image);                holder.textView = (TextView) convertView.findViewById(R.id.pull_text);                convertView.setTag(holder);            }else{                holder = (ImageHolder) convertView.getTag();               }            holder.textView.setText(list.get(position).getDesc());            ImageLoader.getInstance().displayImage(list.get(position).getImages().get(0),holder.imageView, ImageLoaderUtil.getDefautOption());        }else if (getItemViewType(position)==TEXT){            //如果返回TEXT            TextHolder holder;            if (convertView==null){                convertView = View.inflate(context, R.layout.pull_item1,null);                holder = new TextHolder();                holder.textView = (TextView) convertView.findViewById(R.id.pull_text);                convertView.setTag(holder);            }else{                holder = (TextHolder) convertView.getTag();            }            holder.textView.setText(list.get(position).getDesc());        }        return convertView;    }    class ImageHolder{        ImageView imageView;        TextView textView;    }    class TextHolder{        TextView textView;    }}

上面是无限轮播图 下面是gridview 可以下拉刷新加载

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"><RelativeLayout    android:layout_width="match_parent"    android:layout_height="0dp"    android:layout_weight="3"    >    <android.support.v4.view.ViewPager        android:background="#ff0000"       android:id="@+id/gridview_viewpager"        android:layout_width="match_parent"        android:layout_height="match_parent"></android.support.v4.view.ViewPager>这是小圆点的布局,小圆点需要在drawable下面建立shape01.xml
<?xml version="1.0" encoding="utf-8"?>没选中的小圆点 <shape xmlns:android="http://schemas.android.com/apk/res/android">    <corners android:radius="5dp"/>    <size android:height="10dp" android:width="10dp"/>    <solid android:color="#000000"/></shape>选中的小圆点
<shape xmlns:android="http://schemas.android.com/apk/res/android">    <corners android:radius="5dp"/>    <size android:height="10dp" android:width="10dp"/>    <solid android:color="#ff0000"/></shape>

 <LinearLayout
android:layout_width="100dp"
android:layout_height="50dp"
android:orientation="horizontal"
android
:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:id="@+id/gridview_linearshape"
></LinearLayout>
</RelativeLayout>

<
com.handmark.pulltorefresh.library.PullToRefreshGridView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/pull_refresh_grid"
android:layout_height="0dp"
android:layout_weight="5"
android:layout_width="match_parent"
android:numColumns="2"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
android:columnWidth="100dp"
android:stretchMode="columnWidth"
android:gravity="fill"
ptr:ptrMode="both" />
</
LinearLayout>

public class Fragment_GridView extends Fragment{private Handler handler = new Handler(){    @Override    public void handleMessage(Message msg) {        if (msg.what==0){            int currentItem = viewPager.getCurrentItem();            viewPager.setCurrentItem(currentItem+1);            handler.sendEmptyMessageDelayed(0,2000);        }    }};    private ViewPager viewPager;    private LinearLayout linearLayout;    private List<ImageView> listshape;    private List<String> list;    List<MeishiBean.ResultBean.DataBean> listgrid = new ArrayList<>();    private GridViewAdapter gridViewAdapter;    private PullToRefreshGridView refreshGridView;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_gridview, container, false);        refreshGridView = (PullToRefreshGridView) view.findViewById(R.id.pull_refresh_grid);        viewPager = (ViewPager) view.findViewById(R.id.gridview_viewpager);        linearLayout = (LinearLayout) view.findViewById(R.id.gridview_linearshape);        return view;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        //访问数据的方法        getData();        //访问网络图片        list = new ArrayList<>();        list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207203154_yAhxW.thumb.700_0.jpeg");        list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207204451_vUxdK.thumb.700_0.jpeg");        list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207204612_khkBv.thumb.700_0.jpeg");        list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207205514_uMz5u.thumb.700_0.jpeg");        list.add("https://b-ssl.duitang.com/uploads/item/201502/10/20150210133942_AaJ8R.thumb.700_0.jpeg");        initShape();        LuoBoAdapter luoBoAdapter = new LuoBoAdapter(list, getActivity());        viewPager.setAdapter(luoBoAdapter);        viewPager.setCurrentItem(100000);        handler.sendEmptyMessageDelayed(0,2000);                refreshGridView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() {            @Override            public void onPullDownToRefresh(final PullToRefreshBase<GridView> refreshView) {                long currentTimeMillis = System.currentTimeMillis();                Date date2= new Date(currentTimeMillis);                SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");                String format = dateFormat.format(date2);                //设置刷新的时间                refreshView.setLastUpdatedLabel(format);                getDataRefresh();            }            @Override            public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) {                long currentTimeMillis = System.currentTimeMillis();                Date date2= new Date(currentTimeMillis);                SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");                String format = dateFormat.format(date2);                //设置刷新的时间                refreshView.setLastUpdatedLabel(format);                 getData();            }        });        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                for (int i = 0; i <listshape.size() ; i++) {                   if (i==position%listshape.size()){                       listshape.get(i).setImageResource(R.drawable.shape02);                   }else{                       listshape.get(i).setImageResource(R.drawable.shape01);                   }                }            }            @Override            public void onPageSelected(int position) {            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    private void getDataRefresh() {        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {            @Override            protected String doInBackground(Void... params) {                String path="http://apis.juhe.cn/cook/query?key=b0eeae4ccd73cce88a8d78e60c64d61c&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=3";                try {                    URL url = new URL(path);                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setConnectTimeout(5000);                    connection.setReadTimeout(5000);                    int responseCode = connection.getResponseCode();                    if (responseCode==200){                        InputStream inputStream = connection.getInputStream();                        String json = streamtoString(inputStream,"utf-8");                        Thread.sleep(1500);                        return json;                    }                } catch (Exception e) {                    e.printStackTrace();                }                return "";            }            @Override            protected void onPostExecute(String json) {                Gson gson = new Gson();                MeishiBean meishibean = gson.fromJson(json, MeishiBean.class);                if (meishibean!=null && meishibean.getResult().getData()!=null) {                    listgrid.addAll(0,meishibean.getResult().getData());                    //停止刷新                    refreshGridView.onRefreshComplete();                    setAdapter();                }            }        };        asyncTask.execute();    }    private void getData() {        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {            @Override            protected String doInBackground(Void... params) {                String path="http://apis.juhe.cn/cook/query?key=b0eeae4ccd73cce88a8d78e60c64d61c&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=3";                try {                    URL url = new URL(path);                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setConnectTimeout(5000);                    connection.setReadTimeout(5000);                    int responseCode = connection.getResponseCode();                    if (responseCode==200){                        InputStream inputStream = connection.getInputStream();                        String json = streamtoString(inputStream,"utf-8");                        Thread.sleep(1500);                        return json;                    }                } catch (Exception e) {                    e.printStackTrace();                }                return "";            }            @Override            protected void onPostExecute(String json) {                Gson gson = new Gson();                MeishiBean meishibean = gson.fromJson(json, MeishiBean.class);                if (meishibean!=null && meishibean.getResult().getData()!=null) {                    listgrid.addAll(meishibean.getResult().getData());                 //停止刷新                    refreshGridView.onRefreshComplete();                    setAdapter();                }            }        };        asyncTask.execute();    }http://write.blog.csdn.net/postedit    private void setAdapter() {        if (gridViewAdapter==null) {            gridViewAdapter = new GridViewAdapter(listgrid, getActivity());            refreshGridView.setAdapter(gridViewAdapter);        }else{            gridViewAdapter.notifyDataSetChanged();        }    }初始化小圆点    private void initShape() {        listshape = new ArrayList<>();        //清空布局和集合        linearLayout.removeAllViews();        listshape.clear();        for (int i = 0; i < list.size(); i++) {            ImageView imageView = new ImageView(getActivity());            if (i == 0) {                imageView.setImageResource(R.drawable.shape02);            } else {                imageView.setImageResource(R.drawable.shape01);            }            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);            layoutParams.setMargins(5, 0, 5, 0);            ///添加到集合和布局里            listshape.add(imageView);            linearLayout.addView(imageView, layoutParams);        }    }    public static String streamtoString(InputStream inputStream, String charset) {        try {            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);            StringBuilder builder = new StringBuilder();            String s = null;            while((s = bufferedReader.readLine())!=null){                builder.append(s);            }            bufferedReader.close();            return builder.toString();        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    }


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