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

使用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;
    }
    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值