第一步、先在res文件下drawable里边写sele_r.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"><color android:color="@color/colorPrimary"/></item>
<item android:state_checked="false"><color android:color="@color/colorAccent"/></item>
</selector>。
在values里边写colors.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
</resources>。
在layout里边写布局:
1.activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radiobutton1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/sele_r"
android:button="@null"
android:checked="true"
android:gravity="center"
android:padding="6dp"
android:text="ListView" />
<RadioButton
android:id="@+id/radiobutton2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/sele_r"
android:button="@null"
android:gravity="center"
android:padding="6dp"
android:text="GridView" />
</RadioGroup>
</LinearLayout>
2.frag_grid.xml:
<?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">
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="2" />
</RelativeLayout>
3.frag_list.xml:
<?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">
<com.qy.xlistview.XListView
android:id="@+id/xlistview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
4.item_one.xml:
<?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:padding="16dp">
<ImageView
android:id="@+id/img1"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@mipmap/ic_launcher_round" />
<TextView
android:id="@+id/name1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/img1"
android:layout_alignParentEnd="true"
android:layout_marginEnd="146dp"
android:text="你说江南" />
</RelativeLayout>
5.item_two.xml:
<?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:padding="16dp">
<ImageView
android:id="@+id/img2"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
/>
<TextView
android:id="@+id/name2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="US爱笑此生此大V你覅UNVR牛" />
</RelativeLayout>
第二步:在MainActivity里边写,代码如下:
package com.bawei.rui;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioGroup;
import com.bawei.rui.adapter.MyFragmentAdapter;
import com.bawei.rui.frag.FragGrid;
import com.bawei.rui.frag.FragList;
import java.util.ArrayList;
public class MainActivity extends FragmentActivity {
private RadioGroup radioGroup;
private ViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager = findViewById(R.id.pager);
radioGroup = findViewById(R.id.radiogroup);
radioGroup.check(radioGroup.getChildAt(0).getId());
ArrayList<Fragment> list = new ArrayList<>();
list.add(new FragList());
list.add(new FragGrid());
pager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(), list));
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
radioGroup.check(radioGroup.getChildAt(i).getId());
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.radiobutton1:
pager.setCurrentItem(0);
break;
case R.id.radiobutton2:
pager.setCurrentItem(1);
break;
}
}
});
}
}
第三步:分别建adapter/app/bean/frag/http这几个包下的类:
1.App类,代码如下:
package com.bawei.rui.app;
import android.app.Application;
import com.bawei.rui.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//设置框架的属性
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.zhan)
.displayer(new CircleBitmapDisplayer())
.build();
//图像加载器配置
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.defaultDisplayImageOptions(options)
//构建
.build();
ImageLoader instance = ImageLoader.getInstance();
//获得实例
instance.init(configuration);
//初始化
}
}
2.Http类,代码如下:
package com.bawei.rui.http;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class HttpUtil {
public static String requestHttpGet(String strurl) {
try {
URL url = new URL(strurl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if (code == HttpURLConnection.HTTP_OK) {
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "utf-8"));
StringBuilder builder = new StringBuilder();
String str = "";
while ((str = reader.readLine()) != null) {
builder.append(str);
}
return builder.toString();
}
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
2.1、MyAsyncTask,代码如下:
package com.bawei.rui.http;
import android.os.AsyncTask;
public class MyAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... strings) {
return HttpUtil.requestHttpGet(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
backs.getdate(s);
}
public interface CallBacks {
String getdate(String s);
}
private CallBacks backs;
public void setBacks(CallBacks backs) {
this.backs = backs;
}
}
3.bean类,一个Date类,一个JsonBean类。先写Date类,代码如下:
package com.bawei.rui.bean;
public class Date {
/* "author_name": "大众网",
"category": "头条",
"date": "2018-05-12 06:07",
"thumbnail_pic_s": "http://07.imgmini.eastday.com/mobile/20180512/20180512060745_78550703b206b53ace6a0c51b1d737d4_1_mwpm_03200403.jpg",
"title": "难忘救援经历 回忆激励前行 ",
"uniquekey": "92ee0d2a31867a8f215b0517d99a9409",
"url": "http://mini.eastday.com/mobile/180512060745166.html"
},*/
private String author_name;
private String category;
private String date;
private String thumbnail_pic_s;
private String title;
private String uniquekey;
private String url;
public Date(String author_name) {
this.author_name = author_name;
this.category = category;
this.date = date;
this.thumbnail_pic_s = thumbnail_pic_s;
this.title = title;
this.uniquekey = uniquekey;
this.url = url;
}
public String getAuthor_name() {
return author_name;
}
public void setAuthor_name(String author_name) {
this.author_name = author_name;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getThumbnail_pic_s() {
return thumbnail_pic_s;
}
public void setThumbnail_pic_s(String thumbnail_pic_s) {
this.thumbnail_pic_s = thumbnail_pic_s;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUniquekey() {
return uniquekey;
}
public void setUniquekey(String uniquekey) {
this.uniquekey = uniquekey;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String toString() {
return "Date{" +
"author_name='" + author_name + '\'' +
", category='" + category + '\'' +
", date='" + date + '\'' +
", thumbnail_pic_s='" + thumbnail_pic_s + '\'' +
", title='" + title + '\'' +
", uniquekey='" + uniquekey + '\'' +
", url='" + url + '\'' +
'}';
}
}
在写JsonBean类,代码如下:
package com.bawei.rui.bean;
import java.util.ArrayList;
public class JsonBean {
private String code;
private ArrayList<Date> data;
private String msg;
public JsonBean(String code, ArrayList<Date> data, String msg) {
this.code = code;
this.data = data;
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public ArrayList<Date> getData() {
return data;
}
public void setData(ArrayList<Date> data) {
this.data = data;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public String toString() {
return "JsonBean{" +
"code='" + code + '\'' +
", data=" + data +
", msg='" + msg + '\'' +
'}';
}
}
4.第四步:在adapter里边写适配器类,代码如下:
1.MyFragmentAdapter:
package com.bawei.rui.adapter;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.ArrayList;
public class MyFragmentAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> list;
public MyFragmentAdapter(FragmentManager fm, ArrayList<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int i) {
return list.get(i);
}
@Override
public int getCount() {
return list.size();
}
}
2.MyGridAdapter:
package com.bawei.rui.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bawei.rui.R;
import com.bawei.rui.bean.Date;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
public class MyGridAdapter extends BaseAdapter {
private Context context;
private ArrayList<Date> list;
public MyGridAdapter(Context context, ArrayList<Date> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_one, null);
holder = new ViewHolder();
holder.view = convertView.findViewById(R.id.name1);
holder.img = convertView.findViewById(R.id.img1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.view.setText(list.get(position).getAuthor_name());
//
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder.img);
return convertView;
}
class ViewHolder {
TextView view;
ImageView img;
}
}
3.MyListviewAdapter:
package com.bawei.rui.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bawei.rui.R;
import com.bawei.rui.bean.Date;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
public class MyListviewAdapter extends BaseAdapter {
private Context context;
private ArrayList<Date> list;
public MyListviewAdapter(Context context, ArrayList<Date> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return position % 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
switch (getItemViewType(position)) {
case 0:
ViewHolder0 holder0;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_one, null);
holder0 = new ViewHolder0();
holder0.view0 = convertView.findViewById(R.id.name1);
holder0.img0 = convertView.findViewById(R.id.img1);
convertView.setTag(holder0);
} else {
holder0 = (ViewHolder0) convertView.getTag();
}
holder0.view0.setText(list.get(position).getAuthor_name());
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder0.img0);
break;
case 1:
ViewHolder1 holder1;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_two, null);
holder1 = new ViewHolder1();
holder1.view1 = convertView.findViewById(R.id.name2);
holder1.img1 = convertView.findViewById(R.id.img2);
convertView.setTag(holder1);
}else{
holder1 = (ViewHolder1) convertView.getTag();
}
holder1.view1.setText(list.get(position).getCategory()+"");
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder1.img1);
break;
}
return convertView;
}
class ViewHolder0 {
TextView view0;
ImageView img0;
}
class ViewHolder1 {
TextView view1;
ImageView img1;
}
}
第五步:建frag包类,一个FragGrid类,一个FragList类;
1.FragGrid里边代码如下:
package com.bawei.rui.frag;
import android.os.Bundle;
import android.support.annotation.NonNull;
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.GridView;
import com.bawei.rui.R;
import com.bawei.rui.adapter.MyGridAdapter;
import com.bawei.rui.bean.Date;
import com.bawei.rui.bean.JsonBean;
import com.bawei.rui.http.MyAsyncTask;
import com.google.gson.Gson;
import java.util.ArrayList;
public class FragGrid extends Fragment implements MyAsyncTask.CallBacks {
private GridView gridView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_grid, container, false);
gridView = view.findViewById(R.id.gridview);
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.setBacks(this);
myAsyncTask.execute("http://www.xieast.com/api/news/news.php?page=1");
return view;
}
@Override
public String getdate(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
ArrayList<Date> data = jsonBean.getData();
gridView.setAdapter(new MyGridAdapter(getActivity(),data));
return null;
}
}
2.FragList里边代码如下:
package com.bawei.rui.frag;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.bawei.rui.R;
import com.bawei.rui.adapter.MyListviewAdapter;
import com.bawei.rui.bean.Date;
import com.bawei.rui.bean.JsonBean;
import com.bawei.rui.http.HttpUtil;
import com.google.gson.Gson;
import com.qy.xlistview.XListView;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
public class FragList extends Fragment {
private MyListviewAdapter listviewAdapter;
private ArrayList<Date> data;
private XListView xListView;
private String str = "http://www.xieast.com/api/news/news.php?page=1";
private Date date;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_list, container, false);
xListView = view.findViewById(R.id.xlistview);
xListView.setPullLoadEnable(true);
xListView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
new Thread() {
@Override
public void run() {
super.run();
String s = HttpUtil.requestHttpGet(str);
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
ArrayList<Date> data = jsonBean.getData();
Message message = new Message();
message.what = 1;
message.obj = data;
handler.sendMessage(message);
}
}.start();
}
@Override
public void onLoadMore() {
new Thread() {
@Override
public void run() {
super.run();
String s = HttpUtil.requestHttpGet(str);
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
ArrayList<Date> ddd = jsonBean.getData();
Message message = new Message();
message.what = 1;
message.obj = data;
handler.sendMessage(message);
}
}.start();
}
});
new Thread() {
@Override
public void run() {
super.run();
String s = HttpUtil.requestHttpGet(str);
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
ArrayList<Date> data = jsonBean.getData();
Message message = new Message();
message.what = 0;
message.obj = data;
handler.sendMessage(message);
}
}.start();
return view;
}
private void onLoad() {
xListView.stopRefresh();;
xListView.stopLoadMore();
xListView.setRefreshTime(date+"");
date = new Date(System.currentTimeMillis()+"");
}
/* SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月dd日 HH:mm:ss ");
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
String str = formatter.format(curDate);*/
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
data = (ArrayList<Date>) msg.obj;
listviewAdapter = new MyListviewAdapter(getActivity(), data);
xListView.setAdapter(listviewAdapter);
onLoad();
break;
case 1:
xListView.setAdapter(listviewAdapter);
onLoad();
break;
case 2:
ArrayList<Date> ddd = (ArrayList<Date>) msg.obj;
xListView.setAdapter(new MyListviewAdapter(getActivity(), ddd));
onLoad();
break;
}
}
};
}
第六步、也就是最后一步记得写权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在<application里边要记得加上android:name=".app.App"></application>