webview的基本设置引言
由于市面上应用基本上本地+HTML进行混合开发。
本地开发就是使用android系统提供的一些组件来实现
而HTML开发就是使用WebView加载的一个网页,进行开发。
因此,我们有必要更加深入了解一下WebView的使用。
回顾
大家回顾一下:
之前在查看新闻详情界面,我们对WebView有个简单认识。
WebView的基本使用
使用WebView的loadUrl加载一个简单的网页
使用WebView的WebSetting,来修改网页的字体大小。
实现步骤第一步:创建布局文件创建布局文件,引入WebView控件
[XML] 纯文本查看 复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.itheima.webview_base.MainActivity">
<RelativeLayout
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="goBack"
android:text="后退"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="javaCallJs"
android:layout_centerInParent="true"
android:text="javaCallJs"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="goForward"
android:layout_alignParentRight="true"
android:text="前进"/>
</RelativeLayout>
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/rl"></WebView>
</RelativeLayout>
第二步:让WebView支持jswebView.getSettings().setJavaScriptEnabled(true);
第三步:让WebView加载一个网页//加载网页webView.loadUrl(url);
第四步:让WebView中加载网页webView.setWebViewClient(new WebViewClient(){
//页面加载完成@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
第五步:让WebView加载一个asset目录下的网页
//加载assets目录下的网页webView.loadUrl("file:///android_asset/demo.html");
第六步:让WebView支持后退和前进功能后退操作
//回退public void goBack(View view){
if(webView.canGoBack()){
webView.goBack();
}
}
前进操作
public void goForward(View view){
if(webView.canGoForward()){
webView.goForward();
}
}
强调WebViewClient对象使用
注意:WebView的SetWebViewClient方法,传递的WebViewClient对象。
[Java] 纯文本查看 复制代码
webView.setWebViewClient(new WebViewClient(){
//页面加载完成
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
WebViewClient的作用:
帮助WebView处理各种通知、请求事件的
WebViewClient的方法说明:
shouldOverrideUrlLoading(WebView view, String url)
点击请求时,如果是链接是才会调用。
重写此方法返回true:表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。
这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的
onReceivedError(WebView view, int errorCode, String description, String failingUrl)// (报告错误信息)
onPageStarted(WebView view, String url, Bitmap favicon) //这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。
onPageFinished(WebView view, String url) //在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。
WebChromeClient对象的使用可以调用webView的setWebChromeClient方法设置WebChromeClient对象。
webView.setWebChromeClient(new WebChromeClient());
WebChromeClient的作用:
主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等
常见的方法说明:
onJsAlert (WebView上alert无效,需要定制WebChromeClient处理弹出)
onJsPrompt
显示一个提示对话框
onJsConfirm
显示一个确认对话框
onProgressChanged
显示webview加载的进度
onReceivedTitle
获取加载网站的标题
问题问题1:如何让WebView中加载网页?
l 给WebView设置WebViewClient对象
l WebViewClient的作用:
n 帮助WebView处理各种通知、请求事件的
问题2:WebView中的WebViewClient和WebChromeClient对象的区别?
l WebViewClient的作用:
n 帮助WebView处理各种通知、请求事件的
l WebChromeClient的作用:
n 主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等
java和javaScript之间的互调引言在开发中经常会有这样的需求,就是点击Html的条目或者图片时,打开本地的组件
比如:当点击一个图片时,会打开一个activity,查看图片详情。
实现这样的功能,就涉及到android 和 js之间相互交互了。
接下来,我看一下如何实现android和js进行交互?
实现步骤Android调用js代码[Java] 纯文本查看 复制代码
public void javaCallJs(View view){
webView.loadUrl("javascript:wave()");
}
Js调用android代码Android中提供对象,传递给js
[Java] 纯文本查看 复制代码
//把java里面的对象传递给js
webView.addJavascriptInterface(new JsCallJava() {
@JavascriptInterface
@Override
public void onCallback() {
Toast.makeText(getApplicationContext(),"JavaScript调用的java代码",Toast.LENGTH_SHORT).show();
}
}, "demo");
注意:js调用android中的方法,一定使用@JavascriptInterface进行注解
Js执行android代码
[Java] 纯文本查看 复制代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<script language="javascript">
/* This function is invoked by the activity */
function wave() {
alert("Android调用Js啦");
}
</script>
<body>
<!-- Js调用Android代码 -->
<a>点我!</a>
</body>
</html>
强调除了以上WebView的使用,还有一些比较常见的使用。
WebView设置缓存
缓存设置
setCacheMode(int mode)
WebSettings.LOAD_CACHE_ELSE_NETWORK
只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据
WebSettings.LOAD_CACHE_ONLY
只加载缓存
WebSettings.LOAD_DEFAULT
根据cache-control决定是否从网络上取数据 cache-control:?
private(内容只缓存到私有缓存中)
public(所有内容都将被缓存)
no-cache(所有内容都不会被缓存)
max-age=xxx(缓存的内容将在 多长时间后失效)
WebSettings.LOAD_NO_CACHE
清理缓存
webview.clearCache(true);
deleteDatabase("webview.db");
WebView自适应屏幕
WebSettings.setUseWideViewPort(true);
webview推荐使用的窗口, 将图片调整到适合webview的大小
WebSettings.setLoadWithOverviewMode(true);
设置webview加载的页面的模式, 缩放至屏幕的大小
WebView的Cookie的设置
Cookie设置(保存用户登录状态)
创建CookieSyncManager实例
CookieSyncManager.createInstance(this);
获取CookieManager管理器实例
cookieManager = CookieManager.getInstance();
设置支持cookie
cookieManager.setAcceptCookie(true);
设置cookie值
cookieManager.setCookie(“"name=xxx;age=18"”, cookie);
通过CookieSyncManager
CookieSyncManager.getInstance().sync();
获取cookie值
String cookie_value = cookieManager.getCookie(url);
移除cookie
cookieManager.removeAllCookie();
CookieSyncManager.getInstance().sync();
问题问题1:如何实现android和js相互交互?
l js调用android代码
提供java对象,给webview
webView.addJavascriptInterface(new JSObject(), "Android");
提供js,调用java对象
Android.JsCallAndroid(toast)
l android调用js
Webview.loadUrl("javascript:changeInputValue('哈哈 js 您好')");
function changeInputValue(content){
document.getElementById("put_id").value=content;
}
360新闻-从服务器获取分类数据引言有时候,新闻的显示不只是一种分类,而是不同中分类。
像这样的效果,显示不同分类的新闻如何实现呢?
回顾大家回顾一下:
ListView可以通过多种行试图方式来实现不同分类新闻。
重写BaseAdapter的getItemViewType和 getItemCount方法
来创建不同分类的条目来实现
RecyclerView是否也可以实现不同分类的条目吗?
是可以的!
好! 接下来,我们看一下!
实现步骤第一步:从服务器获取360分类的新闻数据解压360后台数据,到tomecat下的webapp目录下:
第二步:创建工程添加依赖库 [Java] 纯文本查看 复制代码
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.zhy:okhttputils:2.6.2'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile files('libs/photoview.jar')
}
第三步:初始化MainActivity
布局实现:
[XML] 纯文本查看 复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.itheima.a360news.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</RelativeLayout>
第四步:绑定控件,联网获取数据[Java] 纯文本查看 复制代码
@BindView(R.id.rv)
RecyclerView rv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//RecyclerView的初始化
rv.setLayoutManager(new LinearLayoutManager(this));
rv.addItemDecoration(new RecycleViewDivider(this,LinearLayoutManager.HORIZONTAL,1, Color.BLACK));
String url = "http://10.0.2.2:8080/360/list1.json";
//联网获取数据
OkHttpUtils
.get()
.url(url)
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
}
@Override
public void onResponse(String response, int id) {
ResuleBean resuleBean = new Gson().fromJson(response, ResuleBean.class);
rv.setAdapter(new NewsAdapter(resuleBean.data,getApplicationContext()));
}
});
}
}
第五步:封装结果bean [Java] 纯文本查看 复制代码
public class ResuleBean {
public List<NewsData> data;
public int error;
public class NewsData{
public int id;
public List<String> imgs;
public String title;
public String weburl;
}
}
第六步:将结果数据转化为javaBean对象[Java] 纯文本查看 复制代码
//联网获取数据
OkHttpUtils
.get()
.url(url)
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
}
@Override
public void onResponse(String response, int id) {
ResuleBean resuleBean = new Gson().fromJson(response, ResuleBean.class);
rv.setAdapter(new NewsAdapter(resuleBean.data,getApplicationContext()));
}
});
360新闻-新闻分类适配器引言
从服务器端成功获取数据以后,下面我们将数据绑定到RecyclerView中进行显示
实现步骤
第一步:初始化RecycerView[Java] 纯文本查看 复制代码
//RecyclerView的初始化
//设置线性的布局管理器
rv.setLayoutManager(new LinearLayoutManager(this));
//设置分割线
rv.addItemDecoration(new RecycleViewDivider(this,LinearLayoutManager.HORIZONTAL,1, Color.BLACK));
第二步:创建新闻分类适配器在适配器中根据getItemViewType方法,来区分条目的类型
[Java] 纯文本查看 复制代码
public class NewsAdapter extends RecyclerView.Adapter {
private List<ResuleBean.NewsData> newsDataList;
private Context context;
public NewsAdapter(List<ResuleBean.NewsData> newsDataList, Context context) {
this.newsDataList = newsDataList;
this.context = context;
}
//区分条目的类型
@Override
public int getItemViewType(int position) {
ResuleBean.NewsData newsData = newsDataList.get(position);
if (newsData.imgs.size() == 3) {//显示三张图片
return 0;
} else if (newsData.imgs.size() == 0) {//显示文字
return 1;
} else if (newsData.imgs.size() == 1) {//显示一张图片和文字
return 2;
}
return super.getItemViewType(position);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == 0) {//显示三张图片
View view = LayoutInflater.from(context).inflate(R.layout.item1, parent, false);
return new ViewHolder1(view);
} else if (viewType == 1) {//显示文字
View view = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);
return new ViewHolder2(view);
} else if (viewType == 2) {//显示一张图片和文字
View view = LayoutInflater.from(context).inflate(R.layout.item3, parent, false);
return new ViewHolder3(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final ResuleBean.NewsData newsData = newsDataList.get(position);
if (newsData.imgs.size() == 3) {//显示三张图片
ViewHolder1 viewHolder1 = (ViewHolder1) holder;
viewHolder1.tvTitle.setText(newsData.title);
Picasso.with(context).load(newsData.imgs.get(0)).into(viewHolder1.iv1);
Picasso.with(context).load(newsData.imgs.get(1)).into(viewHolder1.iv2);
Picasso.with(context).load(newsData.imgs.get(2)).into(viewHolder1.iv3);
//条目的点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context,NewsDetailActivity.class);
intent.putExtra("url",newsData.weburl);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
} else if (newsData.imgs.size() == 0) {//显示文字
ViewHolder2 viewHolder2 = (ViewHolder2) holder;
viewHolder2.tvTitle.setText(newsData.title);
} else if (newsData.imgs.size() == 1) {//显示一张图片和文字
ViewHolder3 viewHolder3 = (ViewHolder3) holder;
viewHolder3.tvTitle.setText(newsData.title);
Picasso.with(context).load(newsData.imgs.get(0)).into(viewHolder3.iv1);
}
}
@Override
public int getItemCount() {
return newsDataList != null ? newsDataList.size() : 0;
}
static class ViewHolder1 extends RecyclerView.ViewHolder {
@BindView(R.id.tv_title)
TextView tvTitle;
@BindView(R.id.iv1)
ImageView iv1;
@BindView(R.id.iv2)
ImageView iv2;
@BindView(R.id.iv3)
ImageView iv3;
ViewHolder1(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
static class ViewHolder2 extends RecyclerView.ViewHolder {
@BindView(R.id.tv_title)
TextView tvTitle;
ViewHolder2(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
static class ViewHolder3 extends RecyclerView.ViewHolder {
@BindView(R.id.iv1)
ImageView iv1;
@BindView(R.id.tv_title)
TextView tvTitle;
ViewHolder3(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
第三步:给RecyclerView设置分类适配器 [Java] 纯文本查看 复制代码
//联网获取数据
OkHttpUtils
.get()
.url(url)
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
}
@Override
public void onResponse(String response, int id) {
//将结果数据转换为javaBean对象
ResuleBean resuleBean = new Gson().fromJson(response, ResuleBean.class);
//设置适配器
rv.setAdapter(new NewsAdapter(resuleBean.data,getApplicationContext()));
}
});
第四步:三种分类的布局实现第一种类型的分类:
[XML] 纯文本查看 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:paddingBottom="10dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="新闻内容"
android:textColor="#000"
android:textSize="16sp"
android:maxLines="1"
android:ellipsize="end"
android:padding="10dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:src="@mipmap/ic_launcher"
android:scaleType="fitXY"
android:id="@+id/iv1"/>
<ImageView
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:src="@mipmap/ic_launcher"
android:scaleType="fitXY"
android:id="@+id/iv2"/>
<ImageView
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:layout_margin="2dp"
android:src="@mipmap/ic_launcher"
android:scaleType="fitXY"
android:id="@+id/iv3"/>
</LinearLayout>
</LinearLayout>
第二种类型的分类:
[XML] 纯文本查看 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:paddingBottom="10dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="新闻内容"
android:textSize="16sp"
android:maxLines="1"
android:ellipsize="end"
android:textColor="#000"
android:padding="10dp"/>
</LinearLayout>
第三种类型的分类:
[XML] 纯文本查看 复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:paddingBottom="10dp"
android:layout_height="wrap_content">
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_margin="2dp"
android:src="@mipmap/ic_launcher"
android:scaleType="fitXY"
android:id="@+id/iv1"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="新闻内容"
android:textSize="16sp"
android:layout_gravity="center_vertical"
android:maxLines="1"
android:ellipsize="end"
android:textColor="#000"
android:padding="10dp"/>
</LinearLayout>
第五步:根据条目类型,创建不同分类的条目
[Java] 纯文本查看 复制代码
public class NewsAdapter extends RecyclerView.Adapter {
private List<ResuleBean.NewsData> newsDataList;
private Context context;
public NewsAdapter(List<ResuleBean.NewsData> newsDataList, Context context) {
this.newsDataList = newsDataList;
this.context = context;
}
//区分条目的类型
@Override
public int getItemViewType(int position) {
ResuleBean.NewsData newsData = newsDataList.get(position);
if (newsData.imgs.size() == 3) {//显示三张图片
return 0;
} else if (newsData.imgs.size() == 0) {//显示文字
return 1;
} else if (newsData.imgs.size() == 1) {//显示一张图片和文字
return 2;
}
return super.getItemViewType(position);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == 0) {//显示三张图片
View view = LayoutInflater.from(context).inflate(R.layout.item1, parent, false);
return new ViewHolder1(view);
} else if (viewType == 1) {//显示文字
View view = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);
return new ViewHolder2(view);
} else if (viewType == 2) {//显示一张图片和文字
View view = LayoutInflater.from(context).inflate(R.layout.item3, parent, false);
return new ViewHolder3(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final ResuleBean.NewsData newsData = newsDataList.get(position);
if (newsData.imgs.size() == 3) {//显示三张图片
ViewHolder1 viewHolder1 = (ViewHolder1) holder;
viewHolder1.tvTitle.setText(newsData.title);
Picasso.with(context).load(newsData.imgs.get(0)).into(viewHolder1.iv1);
Picasso.with(context).load(newsData.imgs.get(1)).into(viewHolder1.iv2);
Picasso.with(context).load(newsData.imgs.get(2)).into(viewHolder1.iv3);
//条目的点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context,NewsDetailActivity.class);
intent.putExtra("url",newsData.weburl);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
} else if (newsData.imgs.size() == 0) {//显示文字
ViewHolder2 viewHolder2 = (ViewHolder2) holder;
viewHolder2.tvTitle.setText(newsData.title);
} else if (newsData.imgs.size() == 1) {//显示一张图片和文字
ViewHolder3 viewHolder3 = (ViewHolder3) holder;
viewHolder3.tvTitle.setText(newsData.title);
Picasso.with(context).load(newsData.imgs.get(0)).into(viewHolder3.iv1);
}
}
@Override
public int getItemCount() {
return newsDataList != null ? newsDataList.size() : 0;
}
static class ViewHolder1 extends RecyclerView.ViewHolder {
@BindView(R.id.tv_title)
TextView tvTitle;
@BindView(R.id.iv1)
ImageView iv1;
@BindView(R.id.iv2)
ImageView iv2;
@BindView(R.id.iv3)
ImageView iv3;
ViewHolder1(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
static class ViewHolder2 extends RecyclerView.ViewHolder {
@BindView(R.id.tv_title)
TextView tvTitle;
ViewHolder2(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
static class ViewHolder3 extends RecyclerView.ViewHolder {
@BindView(R.id.iv1)
ImageView iv1;
@BindView(R.id.tv_title)
TextView tvTitle;
ViewHolder3(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
第六步:根据条目类型,绑定View
[Java] 纯文本查看 复制代码
public class NewsAdapter extends RecyclerView.Adapter {
private List<ResuleBean.NewsData> newsDataList;
private Context context;
public NewsAdapter(List<ResuleBean.NewsData> newsDataList, Context context) {
this.newsDataList = newsDataList;
this.context = context;
}
//区分条目的类型
@Override
public int getItemViewType(int position) {
ResuleBean.NewsData newsData = newsDataList.get(position);
if (newsData.imgs.size() == 3) {//显示三张图片
return 0;
} else if (newsData.imgs.size() == 0) {//显示文字
return 1;
} else if (newsData.imgs.size() == 1) {//显示一张图片和文字
return 2;
}
return super.getItemViewType(position);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == 0) {//显示三张图片
View view = LayoutInflater.from(context).inflate(R.layout.item1, parent, false);
return new ViewHolder1(view);
} else if (viewType == 1) {//显示文字
View view = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);
return new ViewHolder2(view);
} else if (viewType == 2) {//显示一张图片和文字
View view = LayoutInflater.from(context).inflate(R.layout.item3, parent, false);
return new ViewHolder3(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final ResuleBean.NewsData newsData = newsDataList.get(position);
if (newsData.imgs.size() == 3) {//显示三张图片
ViewHolder1 viewHolder1 = (ViewHolder1) holder;
viewHolder1.tvTitle.setText(newsData.title);
Picasso.with(context).load(newsData.imgs.get(0)).into(viewHolder1.iv1);
Picasso.with(context).load(newsData.imgs.get(1)).into(viewHolder1.iv2);
Picasso.with(context).load(newsData.imgs.get(2)).into(viewHolder1.iv3);
//条目的点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context,NewsDetailActivity.class);
intent.putExtra("url",newsData.weburl);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
} else if (newsData.imgs.size() == 0) {//显示文字
ViewHolder2 viewHolder2 = (ViewHolder2) holder;
viewHolder2.tvTitle.setText(newsData.title);
} else if (newsData.imgs.size() == 1) {//显示一张图片和文字
ViewHolder3 viewHolder3 = (ViewHolder3) holder;
viewHolder3.tvTitle.setText(newsData.title);
Picasso.with(context).load(newsData.imgs.get(0)).into(viewHolder3.iv1);
}
}
@Override
public int getItemCount() {
return newsDataList != null ? newsDataList.size() : 0;
}
static class ViewHolder1 extends RecyclerView.ViewHolder {
@BindView(R.id.tv_title)
TextView tvTitle;
@BindView(R.id.iv1)
ImageView iv1;
@BindView(R.id.iv2)
ImageView iv2;
@BindView(R.id.iv3)
ImageView iv3;
ViewHolder1(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
static class ViewHolder2 extends RecyclerView.ViewHolder {
@BindView(R.id.tv_title)
TextView tvTitle;
ViewHolder2(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
static class ViewHolder3 extends RecyclerView.ViewHolder {
@BindView(R.id.iv1)
ImageView iv1;
@BindView(R.id.tv_title)
TextView tvTitle;
ViewHolder3(View view) {
super(view);
ButterKnife.bind(this, view);
}
}