首先是导依赖
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;
}
}
新手开车,勿喷,谢谢!!!