一、前言
昨天实现了记住用户登录状态的功能。
由于后台功能方面已经可以说是彻底完工了,所以我又继续转为对UI页面优化。今天实现了对CardView赋予随机背景色,自定义了头部标题栏。遇到的困难是开始没有理清adapter的思路。
明天继续美化页面。
二、成果展示
三、代码
RecycleViewBaseAdapter.java
package com.androidlearing.tdtreehole.adapter;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.androidlearing.tdtreehole.R;
import com.androidlearing.tdtreehole.bean.ItemBean;
import java.util.List;
import java.util.Random;
/**
* @ProjectName: RecyclerViewDemo
* @Package: com.androidlearing.recyclerviewdemo.adapter
* @ClassName: RecyclerViewBaseAdapter
* @Description: java类作用描述
* @Author: 武神酱丶
* @CreateDate: 2020/3/29 21:46
* @UpdateUser: 更新者
* @UpdateDate: 2020/3/29 21:46
* @UpdateRemark: 更新说明
* @Version: 1.0
*/
public abstract class RecyclerViewBaseAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
protected static List<ItemBean> mData;
private onItemClickListener mOnItemClickListener;
public RecyclerViewBaseAdapter(List<ItemBean> data)
{
this.mData = data;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = getSubView(parent,viewType);
return new InnerHolder(view);
}
protected abstract View getSubView(ViewGroup parent, int viewType);
/**
* 这个方法是用于绑定holder的,一般用来设置数据
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//在这里设置数据
((InnerHolder) holder).setData(mData.get(position),position);
}
/**
* 返回条目的个数
* @return
*/
@Override
public int getItemCount() {
if(mData!=null){
return mData.size();
}
return 0;
}
public void setOnItemClickListener(onItemClickListener Listener) {
//设置一个监听,其实就是要设置一个接口,一个回调的接口
this.mOnItemClickListener = Listener;
}
/**
* 编写回调的步骤
* 1.创建这个接口
* 2.定义接口内部的方法
* 3.提供设置接口的方法(外部实现)
* 4.接口调用
*/
public interface onItemClickListener{
void onItemClick(int position);
}
//获取随机颜色
public static int getRandColor(){
int R=0,G=0,B=0;
Random random = new Random();
for (int i = 0;i<2;i++){
int temp = random.nextInt(16);
R = R*16+temp;
temp = random.nextInt(16);
G = G*16+temp;
temp = random.nextInt(16);
B = B*16+temp;
}
//设置透明度为60%
return Color.argb(60,R,G,B);
}
public class InnerHolder extends RecyclerView.ViewHolder {
private final TextView mTitle;
private final TextView mContent;
private int mPosition;
private final TextView mPostTime;
public InnerHolder( View itemView) {
super(itemView);
//给cardview随机设置背景颜色
itemView.findViewById(R.id.cv_post).setBackgroundColor(getRandColor());
//找到条目控件
mTitle = itemView.findViewById(R.id.title_tv);
mContent = itemView.findViewById(R.id.content_tv);
mPostTime = itemView.findViewById(R.id.post_time_tv);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener!=null) {
mOnItemClickListener.onItemClick(mPosition);
}
}
});
}
/**
* 这个方法用于设置数据
* @param itemBean
*/
public void setData(ItemBean itemBean,int position) {
this.mPosition = position;
//开始设置数据
mTitle.setText(itemBean.getTitle());
mContent.setText(itemBean.getContent());
mPostTime.setText(itemBean.getPosttime());
}
}
}
item_post_index.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"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardUseCompatPadding="true"
app:cardPreventCornerOverlap="false"
app:cardCornerRadius="10dp"
app:contentPadding="0dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/cv_post">
<RelativeLayout
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/title_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是标题"
android:textSize="15sp"
/>
<TextView
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/post_time_tv"
android:text="我是发布日期"
android:textSize="15sp"
/>
</RelativeLayout>
<TextView
android:id="@+id/content_tv"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/relative"
android:textSize="20sp"
android:text="我是内容"
android:textColor="#000000"
/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
</RelativeLayout>
四、今日团队链接