如何实现让RecyclerView有不同尺寸的uibarbuttonitem 尺寸

Android控件(1)
使用RecyclerView显示ListView列表遇到的坑:子item设置match_parent,实际宽度没有全屏
解决办法:onCreateViewHolder()方法中mInflater.inflate()要把parent传进去,如:
return new RecyclerViewHolder1(mInflater.inflate(R.layout.recycler_view_item_1, parent, false));
而不能像之前使用的
inflate(R.layout.item_view,null)
运行效果:
实现步骤:
1,主要界面布局文件activity_main.xml:
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eee"
tools:context="com.xing.recyclerviewtest.MainActivity"&
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" /&
2,两个item布局文件 recycler_view_item1.xml
recycler_view_item2.xml:
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:cardBackgroundColor="#fff"
app:cardCornerRadius="5dp"
app:cardElevation="8dp"&
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"&
android:id="@+id/iv_image"
android:layout_width="match_parent"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:src="@mipmap/ic_launcher" /&
android:id="@+id/tv_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="100dp"
android:padding="10dp"
android:text="jisuanji"
android:textColor="#000"
android:textSize="18sp" /&
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardBackgroundColor="#fff"
android:layout_margin="8dp"
app:cardCornerRadius="5dp"
app:cardElevation="5dp"&
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"&
android:id="@+id/tv_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="jisuanji"
android:textColor="#000"
android:textSize="18sp" /&
3,ActionBar上按钮
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"&
android:id="@+id/action_change_recycler_view"
android:icon="@drawable/img_menu"
android:title="@string/change_recycler_view"
app:showAsAction="always"&
android:id="@+id/item_list"
android:title="List" /&
android:id="@+id/item_grid"
android:title="Grid" /&
android:id="@+id/item_stagger"
android:title="Stagger" /&
4,编写RecyclerView的Adapter
RecycleViewAdapter.java
package com.xing.
import android.content.C
import android.support.v7.widget.RecyclerV
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.widget.ImageV
import android.widget.TextV
* Created by Administrator on .
public class RecyclerViewAdapter extends RecyclerView.Adapter&RecyclerView.ViewHolder& {
private Context mC
private LayoutInflater mI
private String[]
private int[] resId;
public RecyclerViewAdapter(Context context, String[] titles, int[] resId) {
mContext =
mInflater = LayoutInflater.from(context);
this.titles =
this.resId = resId;
public enum ItemType {
ITEM1, ITEM2
* 创建ViewHolder
viewType item布局的类型索引
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ItemType.ITEM1.ordinal()) {
return new RecyclerViewHolder1(mInflater.inflate(R.layout.recycler_view_item_1, parent, false));
} else if (viewType == ItemType.ITEM2.ordinal()) {
return new RecyclerViewHolder2(mInflater.inflate(R.layout.recycler_view_item_2, parent, false));
return null;
* 绑定数据至holder
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
String text = titles[position];
int id = resId[position];
if (holder instanceof RecyclerViewHolder1) {
((RecyclerViewHolder1) holder).imageView.setImageResource(id);
((RecyclerViewHolder1) holder).textView.setText(text);
} else if (holder instanceof RecyclerViewHolder2) {
((RecyclerViewHolder2) holder).textView.setText(text);
public int getItemCount() {
return titles.
* 根据当前的位置索引加载不同的item布局
public int getItemViewType(int position) {
int num = position % 2;
if (num == 0) {
return ItemType.ITEM1.ordinal();
return ItemType.ITEM2.ordinal();
* 第一种item对应的holder
public static class RecyclerViewHolder1 extends RecyclerView.ViewHolder {
ImageView imageV
TextView textV
itemView 表示根布局视图
public RecyclerViewHolder1(View itemView) {
super(itemView);
imageView = (ImageView) itemView.findViewById(R.id.iv_image);
textView = (TextView) itemView.findViewById(R.id.tv_text);
* 第2种item对应的holder
public static class RecyclerViewHolder2 extends RecyclerView.ViewHolder {
TextView textV
itemView 表示根布局视图
public RecyclerViewHolder2(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.tv_text);
5,MainActivity.java
使用发广播的形式,更换RecyclerView显示形式,主要考虑到更换布局的操作可能不在同一个界面上,例如放在设置界面上。
package com.xing.
import android.content.BroadcastR
import android.content.C
import android.content.I
import android.content.IntentF
import android.os.B
import android.support.v7.app.AppCompatA
import android.support.v7.widget.GridLayoutM
import android.support.v7.widget.LinearLayoutM
import android.support.v7.widget.RecyclerV
import android.support.v7.widget.StaggeredGridLayoutM
import android.view.M
import android.view.MenuI
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerV
private String[] titles = {"RecyclerView显示不同类型item布局", "打造 Material Desgin 风格 App",
"面向对象程序编程", "一句话解释栈和队列的区别:东西吃多了,吐是栈,拉是队列!", "Android 从入门到放弃",
"餐厅只接受手机支付而“谢绝现金”被认定违法", "Android", "Java程序设计", "数据结构", "Linux从入门到精通"
private int[] resId = {R.drawable.p1, R.drawable.p2, R.drawable.p2, R.drawable.p2, R.drawable.p1,
R.drawable.p2, R.drawable.p2, R.drawable.p2, R.drawable.p1, R.drawable.p2, R.drawable.p2,
R.drawable.p2};
private LinearLayoutManager linearLayoutM
private RecyclerViewA
private ChangeLayoutReceiver mR
private static final String ACTION_CHANGE_LAYOUT = "com.xing.recylerview.ACTION_CHNAGE_LAYOUT";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
registerLayoutReceiver();
private void initView() {
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
private void initData() {
linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
adapter = new RecyclerViewAdapter(this, titles, resId);
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setAdapter(adapter);
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.item_list:
changeRecyclerViewLayout(0);
case R.id.item_grid:
changeRecyclerViewLayout(1);
case R.id.item_stagger:
changeRecyclerViewLayout(2);
return super.onOptionsItemSelected(item);
private void changeRecyclerViewLayout(int index) {
Intent intent = new Intent();
intent.setAction(ACTION_CHANGE_LAYOUT);
switch (index) {
intent.putExtra("index", 0);
intent.putExtra("index", 1);
intent.putExtra("index", 2);
sendBroadcast(intent);
class ChangeLayoutReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_CHANGE_LAYOUT.equals(action)) {
int index = intent.getIntExtra("index", 0);
updateLayoutManger(index);
private void updateLayoutManger(int index) {
switch (index) {
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setAdapter(adapter);
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false));
mRecyclerView.setAdapter(adapter);
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
mRecyclerView.setAdapter(adapter);
* 在onCreate中注册广播
private void registerLayoutReceiver() {
mReceiver = new ChangeLayoutReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_CHANGE_LAYOUT);
registerReceiver(mReceiver, filter);
* 取消注册广播
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9407次
排名:千里之外
原创:17篇
(1)(2)(1)(1)(2)(1)(2)(1)(2)(2)(2)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'&>&RecyclerView 分组 item实现不同布局
RecyclerView 分组 item实现不同布局
上传大小:23.41MB
RecyclerView 分组 item实现不同布局
综合评分:4(1位用户评分)
所需积分/C币:
下载个数:214
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有0条
审核通过送C币
gradle离线下载集合
创建者:zyq
微信商城专辑
创建者:velada
Android初学者
创建者:haicheng20
上传者其他资源上传者专辑
android流式布局
android 模糊查询
android二级菜单
调取相机相册
仿淘宝购物车
移动开发热门标签
VIP会员动态
下载频道积分规则调整V1710.18
CSDN下载频道积分调整公告V1710.17
开通VIP,海量IT资源任性下载
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
为了良好体验,不建议使用迅雷下载
RecyclerView 分组 item实现不同布局
会员到期时间:
剩余下载个数:
剩余C币:593
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
RecyclerView 分组 item实现不同布局RecyclerView实现多种item布局 - CSDN博客
RecyclerView实现多种item布局
在项目中列表是基本都会用到的,然而在显示列表时,我们需要的数据可能需要不止一种item显示,对于复杂的数据就需要多种item,以不同的样式显示出来,这样效果是很棒的,我们先看一下效果
我们可以看到,这个RecyclerView中有多种item显示出来,那么具体怎么实现呢,其实在RecyclerView中,我们可以重写方法getItemViewType(),这个方法会传进一个参数position表示当前是第几个Item,然后我们可以通过position拿到当前的Item对象,然后判断这个item对象需要那种视图,返回一个int类型的视图标志,然后在onCreatViewHolder方法中给引入布局,这样就能够实现多种item显示了,讲了这么多我们看一下具体的例子
public int getItemViewType(int position) {
if(list.size() == 0){
return EMPTY_VIEW;
} else if(list.get(position) == null){
return PROGRESS_VIEW;
} else if(list.get(position).getType().equals(News.IMAGE_NEWS)){
return IMAGE_VIEW;
return super.getItemViewType(position);
}首先我们重写了getItemViewType这个方法,在这个方法中根据position对item对象做了一些判断,如果存储item对象的集合大小为空,返回空view标识(这里为1),如果item对象为null,返回进度条标识,这个主要是用于实现下拉加载更多,如果item对象类型属于图片类型,就返回图片类型对应的Item,这个就是效果图中的第一个Item类型,否则就是其它类型,也就是效果图中的另一种item布局,然后我们在onCreatViewHolder中具体的为每一种类型引入其布局
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == PROGRESS_VIEW){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.progressbar_item, parent, false);
return new ProgressViewHolder(view);
} else if(viewType == EMPTY_VIEW){
} else if(viewType == IMAGE_VIEW){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_news_item, parent, false);
return new ImageViewHolder(view);
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item, parent, false);
return new NewsViewHolder(view);
}上面的代码就是具体为每种viewType引入其对应的布局,这样就基本实现了多种item布局,但是仅仅是这些还不够,因为我们还要对每种item设置数据,所以还要对每种item写一个VIewHolder来为item显示数据
class NewsViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.news_title)TextV
@BindView(R.id.news_digest)TextV
@BindView(R.id.news_time)TextV
@BindView(R.id.news_src)ImageV
public NewsViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
class ImageViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.news_title) TextV
@BindView(R.id.image_left) ImageView imageL
@BindView(R.id.image_right) ImageView imageR
@BindView(R.id.image_middle) ImageView imageM
@BindView(R.id.news_time) TextV
public ImageViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
class ProgressViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.progressBar) ProgressBar progressB
@BindView(R.id.textView) TextView textV
public ProgressViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}上面就是item对应的几个ViewHolder,判断viewHolder属于那种对象,然后在onBindViewHolder中根据对应的ViewHolder对其控件设置数据并显示
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
clickListener.onItemClick(v, position);
if(holder instanceof NewsViewHolder){
NewsViewHolder viewHolder = (NewsViewHolder)
viewHolder.title.setText(list.get(position).getTitle());
viewHolder.time.setText(list.get(position).getTime());
* Glide加载图片
Glide.with(context).load(list.get(position).getImageUrl().get(0))
.override(dpToPx(72), dpToPx(72)).centerCrop().into(viewHolder.image);
if(list.get(position).getType().equals(News.TEXT_NEWS)){
viewHolder.digest.setText(list.get(position).getDigest());
viewHolder.digest.setText(&&);
} else if(holder instanceof ImageViewHolder){
ImageViewHolder viewHolder = (ImageViewHolder)
viewHolder.title.setText(list.get(position).getTitle());
viewHolder.time.setText(list.get(position).getTime());
setItemImage(viewHolder, list, position);
} else if(holder instanceof ProgressViewHolder){
ProgressViewHolder viewHolder = (ProgressViewHolder)
viewHolder.progressBar.setIndeterminate(true);
整个过程基本就是这样,这种方式在项目中经常会用到,我们就可以这样去处理,下拉加载更多就可以这样实现,在加载完数据后再往对象集合中传入null,然后判断如果出现null就加载progressBar布局,再加上Google官方的SwipeRefreshLayout,下拉刷新,上拉加载就搞定了,其实很容易,而且也有点Material Design 的感觉~~~~~~
看下Adapter的全部代码
package com.zmt.e_read.A
import android.content.C
import android.support.v7.widget.RecyclerV
import android.util.DisplayM
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.widget.ImageV
import android.widget.TextV
import com.bumptech.glide.G
import com.zmt.e_read.Module.N
import com.zmt.e_read.Module.OnItemClickL
import com.zmt.e_read.R;
import com.zmt.e_read.Utils.ProgressViewH
import java.util.C
import java.util.C
import java.util.L
import butterknife.BindV
import butterknife.ButterK
* Created by Dangelo on .
public class NewsAdapter extends RecyclerView.Adapter&RecyclerView.ViewHolder& {
private final int EMPTY_VIEW = 1;
private final int PROGRESS_VIEW = 2;
private final int IMAGE_VIEW = 3;
private List&News&
private OnItemClickListener clickL
public NewsAdapter(Context context, List&News& list, OnItemClickListener clickListener) {
this.context =
this.list =
this.clickListener = clickL
public void addOnItemClickListener(OnItemClickListener clickListener){
this.clickListener = clickL
public int getItemViewType(int position) {
if(list.size() == 0){
return EMPTY_VIEW;
} else if(list.get(position) == null){
return PROGRESS_VIEW;
} else if(list.get(position).getType().equals(News.IMAGE_NEWS)){
return IMAGE_VIEW;
return super.getItemViewType(position);
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == PROGRESS_VIEW){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.progressbar_item, parent, false);
return new ProgressViewHolder(view);
} else if(viewType == EMPTY_VIEW){
} else if(viewType == IMAGE_VIEW){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_news_item, parent, false);
return new ImageViewHolder(view);
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item, parent, false);
return new NewsViewHolder(view);
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
clickListener.onItemClick(v, position);
if(holder instanceof NewsViewHolder){
NewsViewHolder viewHolder = (NewsViewHolder)
viewHolder.title.setText(list.get(position).getTitle());
viewHolder.time.setText(list.get(position).getTime());
* Glide加载图片
Glide.with(context).load(list.get(position).getImageUrl().get(0))
.override(dpToPx(72), dpToPx(72)).centerCrop().into(viewHolder.image);
if(list.get(position).getType().equals(News.TEXT_NEWS)){
viewHolder.digest.setText(list.get(position).getDigest());
viewHolder.digest.setText(&&);
} else if(holder instanceof ImageViewHolder){
ImageViewHolder viewHolder = (ImageViewHolder)
viewHolder.title.setText(list.get(position).getTitle());
viewHolder.time.setText(list.get(position).getTime());
setItemImage(viewHolder, list, position);
} else if(holder instanceof ProgressViewHolder){
ProgressViewHolder viewHolder = (ProgressViewHolder)
viewHolder.progressBar.setIndeterminate(true);
public void setItemImage(ImageViewHolder viewHolder, List&News& list, int position){
viewHolder.imageMiddle.setVisibility(View.VISIBLE);
viewHolder.imageRight.setVisibility(View.VISIBLE);
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
if(list.get(position).getImageUrl().size() == 1){
Glide.with(context).load(list.get(position).getImageUrl().get(0))
.override(displayMetrics.widthPixels - dpToPx(10), dpToPx(90))
.centerCrop().into(viewHolder.imageLeft);
viewHolder.imageMiddle.setVisibility(View.GONE);
viewHolder.imageRight.setVisibility(View.GONE);
} else if(list.get(position).getImageUrl().size() == 2){
int imageWidth = (displayMetrics.widthPixels - dpToPx(20)) / 2;
Glide.with(context).load(list.get(position).getImageUrl().get(0))
.override(imageWidth, dpToPx(90))
.centerCrop().into(viewHolder.imageLeft);
Glide.with(context).load(list.get(position).getImageUrl().get(1))
.override(imageWidth, dpToPx(90))
.centerCrop().into(viewHolder.imageMiddle);
viewHolder.imageRight.setVisibility(View.GONE);
} else if(list.get(position).getImageUrl().size() &= 3){
int imageWidth = (displayMetrics.widthPixels - dpToPx(30)) / 3;
Glide.with(context).load(list.get(position).getImageUrl().get(0))
.override(imageWidth, dpToPx(90))
.centerCrop().into(viewHolder.imageLeft);
Glide.with(context).load(list.get(position).getImageUrl().get(1))
.override(imageWidth, dpToPx(90))
.centerCrop().into(viewHolder.imageMiddle);
Glide.with(context).load(list.get(position).getImageUrl().get(2))
.override(imageWidth, dpToPx(90))
.centerCrop().into(viewHolder.imageRight);
public int getItemCount() {
return list.size();
public int dpToPx(float dp){
float px = context.getResources().getDisplayMetrics().
return (int)(dp * px + 0.5f);
class NewsViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.news_title)TextV
@BindView(R.id.news_digest)TextV
@BindView(R.id.news_time)TextV
@BindView(R.id.news_src)ImageV
public NewsViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
class ImageViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.news_title) TextV
@BindView(R.id.image_left) ImageView imageL
@BindView(R.id.image_right) ImageView imageR
@BindView(R.id.image_middle) ImageView imageM
@BindView(R.id.news_time) TextV
public ImageViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
&pre name=&code& class=&java&&
class ProgressViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.progressBar) ProgressBar progressB
@BindView(R.id.textView) TextView textV
public ProgressViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
项目地址:
本文已收录于以下专栏:
相关文章推荐
遇到复杂的不规则列(即有的行显示的列数多,有的行显示的列数少,并且每列显示的内容页不一样)对于这种需求在recyclerview出来之前的解决方案,要么就是listview中嵌套girdview,要么...
做过电商类应用的朋友可能都会遇到一个比较头疼的问题:复杂的首页布局如何实现。参考百度糯米,美团,bilibili等应用,都会发现其首页的布局相对复杂,例如下图bilibili的首页(第二张是demo实...
转载请标明出处:
http://blog.csdn.net/lmj/article/details/;
本文出自:【张鸿洋的博客】
一、概述记得好久以前针...
前言记录一下之前写的一个多列布局,经常用于筛选条件中,比如这样:这是一个4列数据和1列数据交错下的多列布局。之前我们写的时候用ScrollView包裹两个TextView作为Title,又包裹两个Gr...
本技术博客来自 http://blog.csdn.net/qq_
今天咱们是用RecyclerView来实现这个多种Item的加载.
其实最关键的是要复写RecyclerView的...
scrollview 嵌套recyclerview 时,recyclerview不显示,这就需要我们自己计算recyclerview的高度,比如:
ViewGroup.LayoutParams m...
原文地址:http://www.blogjava.net/mlh123caoer/archive//142067.html
EJB3.0规范使开发EJB比过去更容易,可能诱惑...
### *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布
相信很多安卓开发的朋友,尤其是刚从事安卓开发的朋友, 当产品经理递过来一张复杂页面的设计图时 , 都会有一种茫然...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 男友的尺寸大让我很爽 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信