Android TabLayout的简单使用

首先是导依赖
    compile 'com.android.support:design:26.0.0-alpha1'
    compile 'com.jwenfeng.pulltorefresh:library:1.0.3'
接下来时布局1,使用了ViewPager控件和RadioGroup控件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
     <android.support.v4.view.ViewPager
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:id="@+id/vp1"
         android:layout_alignParentTop="true"
         ></android.support.v4.view.ViewPager>
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="50dp"
         android:id="@+id/lin"
         android:orientation="horizontal"
         android:layout_alignParentBottom="true"
         >
          <RadioGroup
              android:layout_width="match_parent"
              android:layout_height="50dp"
              android:id="@+id/rg"
              android:orientation="horizontal"
              >
               <RadioButton
                   android:layout_width="0dp"
                   android:layout_height="50dp"
                   android:layout_weight="1"
                   android:id="@+id/r1"
                   android:button="@null"
                   android:checked="true"
                   android:text="首页"
                   android:gravity="center"
                   android:background="@drawable/fouse"
                   />
               <RadioButton
                   android:layout_width="0dp"
                   android:layout_height="50dp"
                   android:layout_weight="1"
                   android:id="@+id/r2"
                   android:button="@null"
                   android:text="西瓜视屏"
                   android:gravity="center"
                   android:background="@drawable/fouse"
                   />
               <RadioButton
                   android:layout_width="0dp"
                   android:layout_height="50dp"
                   android:layout_weight="1"
                   android:id="@+id/r3"
                   android:button="@null"
                   android:text="微信头"
                   android:gravity="center"
                   android:background="@drawable/fouse"
                   />
               <RadioButton
                   android:layout_width="0dp"
                   android:layout_height="50dp"
                   android:layout_weight="1"
                   android:id="@+id/r4"
                   android:button="@null"
                   android:text="我的"
                   android:gravity="center"
                   android:background="@drawable/fouse"
                   />
          </RadioGroup>
     </LinearLayout>
</RelativeLayout>
然后是TabLauout控件的布局以及还使用了ViewPager和PullToRefreshListView控件
<?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"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:id="@+id/tabs"
        android:layout_alignParentTop="true"
        app:tabIndicatorHeight="4dp"
        app:tabMode="scrollable"
        app:tabSelectedTextColor="@color/fouse"
        app:tabIndicatorColor="@color/fouse"
        ></android.support.design.widget.TabLayout>
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/tabs"
        android:id="@+id/vp2"
        ></android.support.v4.view.ViewPager>
    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/plv"
        android:layout_below="@id/tabs"
        ></com.handmark.pulltorefresh.library.PullToRefreshListView>
</RelativeLayout>
接下来写一个Viewpager滑动监听以及通过RadioGroup的点击监听来控制四个FragMent页面的滑动切换
package com.example.jrnews;

import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.Nullable;
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.widget.RadioGroup;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by ZhangTAO on 2017/9/18.
 */

public class Main2_act extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener{
    private ViewPager vps1;
    private RadioGroup rg;
    private List<Fragment> list = new ArrayList<Fragment>();
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        init();
        getinit();
    }
    private void init() {
        vps1 = (ViewPager) findViewById(R.id.vp1);
        rg = (RadioGroup) findViewById(R.id.rg);
        list.add(new Frag1());
        list.add(new Frag2());
        list.add(new Frag3());
        list.add(new Frag4());
    }
    private void getinit() {
        MyAdapter adapter = new MyAdapter(getSupportFragmentManager());
        vps1.setAdapter(adapter);
        rg.setOnCheckedChangeListener(this);
    }

    @Override
    public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
        switch (i) {
            case R.id.r1:
                vps1.setCurrentItem(0);
                break;
            case R.id.r2:
                vps1.setCurrentItem(1);
                break;
            case R.id.r3:
                vps1.setCurrentItem(2);
                break;
            case R.id.r4:
                vps1.setCurrentItem(3);
                break;
        }
    }

    class MyAdapter extends FragmentPagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }
        @Override
        public Fragment getItem(int position) {
            return list.get(position);
        }
        @Override
        public int getCount() {
            return list.size();
        }
    }
}

然后开始写主要讲的TabLayout控件,通过一个泛型为String的集合来给TabLayout添加数据,也就是导航栏

package com.example.jrnews;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by ZhangTAO on 2017/9/19.
 */

public class Frag1 extends Fragment{
    private TabLayout tabs;
    private ViewPager vps2;
    private PullToRefreshListView plv;
    private List<String> arraylist;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v1 = inflater.inflate(R.layout.f1,null);
        tabs = v1.findViewById(R.id.tabs);
        vps2 = v1.findViewById(R.id.vp2);
        plv = v1.findViewById(R.id.plv);
        return v1;
    }
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        init();
        getinit();
        tabs.setupWithViewPager(vps2);
    }
    //social&社会、guonei国内、world国际、tiyu体育、huabian娱乐、nbaNBA、football足球、keji科技、startup创业、apple苹果
//    String path = "http://api.tianapi.com/social/?key=c8bb8de75b2287a6c6c390c50afb21e1&num=10";
    private void init() {
        arraylist = new ArrayList<>();
        arraylist.add("社会");
        arraylist.add("国内");
        arraylist.add("国际");
        arraylist.add("娱乐");
        arraylist.add("体育");
        arraylist.add("NBA");
        arraylist.add("足球");
        arraylist.add("科技");
        arraylist.add("创业");
        arraylist.add("苹果");
    }
    private  void getinit() {
        MyAdapters adapter = new MyAdapters(getActivity().getSupportFragmentManager());
        vps2.setAdapter(adapter);
    }
    class MyAdapters extends FragmentPagerAdapter {
        public MyAdapters(FragmentManager fm) {
            super(fm);
        }
        @Override
        public CharSequence getPageTitle(int position) {
            return arraylist.get(position);
        }
        @Override
        public Fragment getItem(int position) {
            Frags frags = new Frags(plv);
            Bundle bundle = new Bundle();
            if (arraylist.get(position).equals("社会")) {
                bundle.putString("name","social");
            }else if (arraylist.get(position).equals("国内")){
                bundle.putString("name","guonei");
            }else if (arraylist.get(position).equals("国际")) {
                bundle.putString("name","world");
            }else if (arraylist.get(position).equals("体育")) {
                bundle.putString("name","tiyu");
            }else if (arraylist.get(position).equals("娱乐")) {
                bundle.putString("name","huabian");
            }else if (arraylist.get(position).equals("NBA")) {
                bundle.putString("name","nba");
            }else if (arraylist.get(position).equals("足球")) {
                bundle.putString("name","football");
            }else if (arraylist.get(position).equals("科技")) {
                bundle.putString("name","keji");
            }else if (arraylist.get(position).equals("创业")) {
                bundle.putString("name","startup");
            }else if (arraylist.get(position).equals("苹果")) {
                bundle.putString("name","apple");
            }
            frags.setArguments(bundle);
            return frags;
        }
        @Override
        public int getCount() {
            return arraylist.size();
        }
    }
}
然后在建一个类继承FragMent,视图为空即可,布局视图:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
</RelativeLayout>
进行请求网络以及Gson解析并建立适配器
package com.example.jrnews;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
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.ListView;

import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import Bean.JsonRootBean;
import Bean.Newslist;

/**
 * Created by ZhangTAO on 2017/9/19.
 */

public class Frags extends Fragment{
    PullToRefreshListView plv;
    private List<Newslist> datas;
    private int nub = 10;
    private Handler ler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
              if (msg.what == 0) {
                  myAdapterzt.notifyDataSetChanged();
                  plv.onRefreshComplete();
              }
        }
    };
    private String names;
    private MyAdapterzt myAdapterzt;

    public Frags(PullToRefreshListView plv) {
        this.plv = plv;
    }
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View vs = inflater.inflate(R.layout.fs, null);
        return vs;
    }
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Bundle arguments = getArguments();
        names = arguments.getString("name","social");
        if (isNetWorkInif()) {
            getDatamatFor(names);
        }else {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle("警告!");
            builder.setMessage("网络不可用,是否设置?");
            builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
                    startActivity(intent);
                }
            });
            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                }
            });
            builder.show();
        }
    }
    private boolean isNetWorkInif() {
        ConnectivityManager manager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = manager.getActiveNetworkInfo();
        if (info != null) {
            return info.isAvailable();
        }
        return false;
    }
    public void getDat(String name) {
            String json = null;
            String path = "http://api.tianapi.com/"+name+"/?key=c8bb8de75b2287a6c6c390c50afb21e1&num="+nub;
            try {
                URL url = new URL(path);
                HttpURLConnection connection = null;
                    connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(5000);
                int code = connection.getResponseCode();
                if (code == 200) {
                    InputStream inputStream = connection.getInputStream();
                    json = streamTostring(inputStream, "utf-8");
                    Gson gs = new Gson();
                    JsonRootBean fromJson = gs.fromJson(json.toString(), JsonRootBean.class);
                    datas = fromJson.getNewslist();
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public String streamTostring(InputStream input,String charset) {
             String con = null;
            InputStreamReader inputStreamReader = new InputStreamReader(input);
            StringBuilder builder = new StringBuilder();
            BufferedReader reader = new BufferedReader(inputStreamReader);
            try {
                while ((con = reader.readLine()) != null) {
                    builder.append(con);
                }
                    return builder.toString();
            } catch (IOException e) {
                e.printStackTrace();
            }
                return null;
        }
    private void getDatamatFor(final String strings) {
        AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                getDat(strings);
                return null;
            }
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                myAdapterzt = new MyAdapterzt(getActivity(),datas);
                plv.setAdapter(myAdapterzt);
                plv.setMode(PullToRefreshBase.Mode.BOTH);
                plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
                    @Override
                    public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                        plv.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                myAdapterzt.notifyDataSetChanged();
                                plv.onRefreshComplete();
                            }
                        },3000);
                    }

                    @Override
                    public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                nub=nub+5;
                                getDatamatFor(names);
                                ler.sendEmptyMessageDelayed(0,3000);
                            }
                        }).start();
                    }
                });
            }
        };
        task.execute();
    }
}
接下来是适配器的类
package com.example.jrnews;
import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import java.util.List;

import Bean.Newslist;
/**
 * Created by ZhangTAO on 2017/9/19.
 */

public class MyAdapterzt extends BaseAdapter{
    Context context;
    List<Newslist> datas;
    public static final int typeone = 0;
    public static  final int typetwo = 1;

    public MyAdapterzt(FragmentActivity activity, List<Newslist> datas) {
        this.context = activity;
        this.datas = datas;
    }
    @Override
    public int getCount() {
        return datas.size();
    }

    @Override
    public Object getItem(int i) {
        return datas.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
      ViewHodlerone hodlerone = null;
        ViewHodlertwo hodlertwo = null;
        int type = getItemViewType(i);
        if (view == null) {
            switch (type) {
                case typeone:
                    view = View.inflate(context, R.layout.one_act, null);
                    hodlerone = new ViewHodlerone();
                    hodlerone.title1 = view.findViewById(R.id.title1);
                    hodlerone.desc1 = view.findViewById(R.id.desc1);
                    hodlerone.ctime1 = view.findViewById(R.id.ctime1);
                    hodlerone.img1 = view.findViewById(R.id.img1);
                    view.setTag(hodlerone);
                    break;
                case typetwo:
                    view = View.inflate(context, R.layout.two_act, null);
                    hodlertwo = new ViewHodlertwo();
                    hodlertwo.title2 = view.findViewById(R.id.title2);
                    hodlertwo.desc2 = view.findViewById(R.id.desc2);
                    hodlertwo.ctime2 = view.findViewById(R.id.ctime2);
                    view.setTag(hodlertwo);
            }
        }
            switch (type) {
                case 0:
                    hodlerone = (ViewHodlerone) view.getTag();
                    hodlerone.title1.setText(datas.get(i).getTitle());
                    hodlerone.desc1.setText(datas.get(i).getDescription());
                    hodlerone.ctime1.setText(datas.get(i).getCtime());
                    DisplayImageOptions options = new DisplayImageOptions.Builder()
                            .showImageOnLoading(R.mipmap.ic_launcher)
                            .build();
                    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                            .defaultDisplayImageOptions(options).threadPoolSize(5)
                            .build();
                    ImageLoader.getInstance().init(config);
                    ImageLoader.getInstance().displayImage(datas.get(i).getPicUrl(),hodlerone.img1);
                    break;
                case 1:
                    hodlertwo = (ViewHodlertwo) view.getTag();
                    hodlertwo.title2.setText(datas.get(i).getTitle());
                    hodlertwo.desc2.setText(datas.get(i).getDescription());
                    hodlertwo.ctime2.setText(datas.get(i).getCtime());
                    break;
            }
            return view;
    }
    @Override
    public int getItemViewType(int position) {
        int pp = position % 2;
        if (pp == 0) {
            return 0;
        }else {
            return 1;
        }
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }
    static class ViewHodlerone {
        TextView title1;
        TextView desc1;
        TextView ctime1;
        ImageView img1;
    }
    static class ViewHodlertwo {
        TextView title2;
        TextView desc2;
        TextView ctime2;
    }
}

新手开车,勿喷,谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值