RecyclerView相比listView和GridView更加灵活高效,之前一直在用ListView,结合自定义ViewHolder做一些界面,用RecyclerView之后感觉二者十分相似,RecyclerView省去了ListView中getViewV()方法的setTag和getTag函数调用。
假期准备比赛第一次用RecyclerView,实现了类似QQ动态详情页的评论列表,点击评论图标发表评论,点击评论字段发送二级评论,点击二级评论可以进行回复,先看一下效果图:
稍微复杂点的处理就是RecyclerView的动态更新,更新前要判定在哪里添加评论,是添加评论Item还是更新Item中的子评论,
同时要注意是否是回复评论人。处理方法是声明3个标记变量,分别对应上述的情况,在监听方法中更改变量,发表新评论就根据
变量的取值对RecyclerView进行更新。
布局文件就是一个简单的RecyclerView,为其设置一个ViewHeader,这个ViewHeader就是所要评论的动态内容。
以下是activity代码:
package com.eztt.dtour.activity;
import android.content.ClipboardManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.eztt.dtour.DTourHelper;
import com.eztt.dtour.R;
import com.eztt.dtour.adapter.CommentAdapter;
import com.eztt.dtour.adapter.ImageAdapter;
import com.eztt.dtour.adapter.VideoAdapter;
import com.eztt.dtour.base.BaseActivity;
import com.eztt.dtour.bean.CommentListBean;
import com.eztt.dtour.bean.CommentUserBean;
import com.eztt.dtour.bean.CommentsBean;
import com.eztt.dtour.fragment.DynamicFragment;
import com.eztt.dtour.utils.EmojiUtils;
import com.eztt.dtour.utils.NineUtils;
import com.hyphenate.easeui.domain.EaseEmojicon;
import com.hyphenate.easeui.widget.EaseChatInputMenu;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
import cn.jzvd.JZVideoPlayer;
import de.hdodenhof.circleimageview.CircleImageView;
public class DynamicDetail extends BaseActivity{
public static final String TAG = DynamicDetail.class.getSimpleName();
private RecyclerView commmentList;
private CommentAdapter commentAdapter;
private TextView UserName;
private TextView Content;
private CircleImageView Avatar;
private RecyclerView Images;
private TextView Location;
private TextView Time;
private TextView CommentNum;
private TextView ThumbNum;
private ImageView Likeimg;
private ImageView commentimg;
private EaseChatInputMenu inputMenu;
private InputMethodManager inputManager;
private ClipboardManager clipboard;
private DisplayImageOptions options;
private static final int main_comment_type = 0;//添加新的评论
private static final int second_comment_type = 1;//点击评论字段发表二级评论
private static final int third_comment_type = 2;//点击二级评论回复
private int current_comment_location;
private int Current_commentItem_location;
private List<CommentsBean> temp_Datas;
private int current_comment_type;
List<CommentListBean> testlist;//评论列表的数据源
@Override
public int getLayoutId() {
return R.layout.dynamic_comment_details;
}
@Override
public void initViews() {
inputMenu = findView(R.id.comment_input_menu);
inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
testlist=new ArrayList<CommentListBean>() ;
commentAdapter=new CommentAdapter(testlist,this);
comm