1.Mainactivity主页面
package com.example.week01_02;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
import static com.example.week01_02.LoginActivity.URL_KEY;
public class MainActivity extends AppCompatActivity {
private ListView listView;
private NewsAdaper mAdaper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取资源id
listView = findViewById(R.id.lv_list);
//创建适配器
mAdaper = new NewsAdaper(MainActivity.this);
listView.setAdapter(mAdaper);
//点击跳转
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(MainActivity.this,LoginActivity.class);
intent.putExtra(URL_KEY,mAdaper.getItem(position).getUrl());
startActivity(intent);
}
});
infoData();
}
private static String ttUrl = "http://result.eolinker.com/k2BaduF2a6caa275f395919a66ab1dfe4b584cc60685573?uri=tt";
private static String gnUrl = "http://result.eolinker.com/k2BaduF2a6caa275f395919a66ab1dfe4b584cc60685573?uri=gn";
@SuppressLint("StaticFieldLeak")
private void infoData() {
new AsyncTask<String,Void,List<NewsBean.ResultBean.DataBean>>(){
@Override
protected List<NewsBean.ResultBean.DataBean> doInBackground(String... strings) {
List<NewsBean.ResultBean.DataBean> request = new ArrayList<>();
for (String url:strings) {
NewsBean bean = NetUtil.getRequest(url, NewsBean.class);
request.addAll(bean.getResult().getData());
}
return request;
}
@Override
protected void onPostExecute(List<NewsBean.ResultBean.DataBean> dataBeans) {
mAdaper.setmData(dataBeans);
}
}.execute(ttUrl,gnUrl);
}
}
2.Bean类
package com.example.week01_02;
import java.util.List;
public class NewsBean {
private ResultBean result;
public ResultBean getResult() {
return result;
}
public void setResult(ResultBean result) {
this.result = result;
}
public static class ResultBean {
private List<DataBean> data;
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
private static final String tt = "头条";
private String title;
private String date;
private String category;
private String url;
private String thumbnail_pic_s;
public static String getTt() {
return tt;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
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 boolean isTT(){
return category.equals(tt);
}
}
}
}
3.适配器类
package com.example.week01_02;
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 android.widget.VideoView;
import java.util.ArrayList;
import java.util.List;
public class NewsAdaper extends BaseAdapter {
private List<NewsBean.ResultBean.DataBean> mData;
private Context mContext;
private static final int ITEM_COUNT = 2;
private static final int TT_ITEM = 0;
private static final int GN_ITEM = 1;
public NewsAdaper(Context mContext) {
this.mContext = mContext;
//初始化
mData = new ArrayList<>();
}
public void setmData(List<NewsBean.ResultBean.DataBean> datas){
this.mData = datas;
notifyDataSetChanged();
}
@Override
public int getViewTypeCount() {
return ITEM_COUNT;
}
@Override
public int getItemViewType(int position) {
return getItem(position).isTT()?TT_ITEM:GN_ITEM;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public NewsBean.ResultBean.DataBean getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
convertView = LayoutInflater.from(mContext).inflate(
getItemViewType(position)==TT_ITEM?R.layout.tt_item:R.layout.gn_item,parent,false);
holder = new ViewHolder(convertView);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.bind(getItem(position));
return convertView;
}
class ViewHolder{
ImageView image;
TextView title;
TextView date;
public ViewHolder(View convertView) {
title = convertView.findViewById(R.id.title);
date = convertView.findViewById(R.id.date);
image = convertView.findViewById(R.id.image);
convertView.setTag(this);
}
public void bind(NewsBean.ResultBean.DataBean item) {
title.setText(item.getTitle());
date.setText(item.getDate());
if(image!=null){
image.setImageResource(R.mipmap.ic_launcher);
}
}
}
}
4.工具类
package com.example.week01_02;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import com.google.gson.Gson;
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.net.URLConnection;
public class NetUtil {
//判断是否有网络
public static boolean hasNetWork(Context context){
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
return activeNetworkInfo!=null&&activeNetworkInfo.isAvailable();
}
//执行get请求 返回string
public static String getRequest(String urlStr){
String result = "";
try {
//定义url地址
URL url = new URL(urlStr);
//打开连接
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//设置请求类型
urlConnection.setRequestMethod("GET");
//超时
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
//获取请求码
int responseCode = urlConnection.getResponseCode();
if(responseCode == 200 ){
result = stream2String(urlConnection.getInputStream());
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
//将字节流转换为字符流
private static String stream2String(InputStream inputStream) throws IOException {
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(isr);
StringBuilder builder = new StringBuilder();
for(String tem = br.readLine();tem!=null;tem = br.readLine()){
builder.append(tem);
}
return builder.toString();
}
//执行get请求 返回Bean
public static <E> E getRequest(String urlStr,Class clazz){
String request = getRequest(urlStr);
E e = (E) new Gson().fromJson(request,clazz);
return e;
}
}
5.跳转展示webview页面
package com.example.week01_02;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebView;
public class LoginActivity extends AppCompatActivity {
public static final String URL_KEY = "url";
private WebView webView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//获取资源id
webView = findViewById(R.id.web);
//接收
String url = getIntent().getStringExtra(URL_KEY);
webView.loadUrl(url);
}
}
6.布局页面
6.1mainactivity页面布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
tools:context=".MainActivity">
<ListView
android:id="@+id/lv_list"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
/>
</android.support.constraint.ConstraintLayout>
6.2listview子条目布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/image"
android:layout_width="120dp"
android:layout_height="100dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintRight_toLeftOf="@id/image"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@id/image"
android:text="标题"
/>
<TextView
android:id="@+id/date"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintRight_toLeftOf="@id/image"
app:layout_constraintLeft_toLeftOf="parent"
android:text="时间"
app:layout_constraintBottom_toBottomOf="@id/image"
/>
</android.support.constraint.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:maxLines="2"
android:text="title"
app:layout_constraintBottom_toTopOf="@id/date"
/>
<TextView
android:id="@+id/date"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/title"
android:maxLines="2"
android:layout_marginTop="15sp"
android:text="日期"
/>
</android.support.constraint.ConstraintLayout>
6.3跳转页面布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<WebView
android:id="@+id/web"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
/>
</android.support.constraint.ConstraintLayout>