From a824b62bde75373c9b6b8d3a60b3a279895c8675 Mon Sep 17 00:00:00 2001
From: Administrator <123>
Date: Sat, 06 Nov 2021 08:17:44 +0000
Subject: [PATCH] 广场 帖子 UI

---
 app/src/main/java/com/duqing/missions/base/adapter/BaseAdapter.java |  102 ++++++++++++++++++++++++++++----------------------
 1 files changed, 57 insertions(+), 45 deletions(-)

diff --git a/app/src/main/java/com/duqing/missions/base/adapter/BaseAdapter.java b/app/src/main/java/com/duqing/missions/base/adapter/BaseAdapter.java
index 3f25fc8..84f958a 100644
--- a/app/src/main/java/com/duqing/missions/base/adapter/BaseAdapter.java
+++ b/app/src/main/java/com/duqing/missions/base/adapter/BaseAdapter.java
@@ -2,20 +2,17 @@
 
 import android.graphics.drawable.Drawable;
 import android.view.LayoutInflater;
-import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.annotation.LayoutRes;
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.viewbinding.ViewBinding;
 
-import com.duqing.missions.R;
 import com.duqing.missions.base.activities.BaseActivity;
-import com.duqing.missions.common.NullViewHolder;
 import com.duqing.missions.databinding.LayoutNullBinding;
 import com.duqing.missions.util.DeviceUtil;
 
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.util.ArrayList;
@@ -26,14 +23,14 @@
  *  T  数据类型
  *  V 适配器视图
  */
-public abstract class BaseAdapter<B extends ViewBinding,A extends BaseActivity,T> extends RecyclerView.Adapter {
+public abstract class BaseAdapter<B extends ViewBinding,T> extends RecyclerView.Adapter {
 
     protected List<T> mData = new ArrayList<>();
 
     protected Drawable nullDrawable;
     protected String nullTxt="暂无数据";
     protected String TAG = "BaseAdapter";
-    protected  A activity;
+    protected BaseActivity activity;
 
     public BaseAdapter(){
     }
@@ -54,48 +51,49 @@
     @NonNull
     @Override
     public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
-        // get genericity "B"
-        Class<B> entityClass = (Class<B>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
-        try {
-           /* for(Method method: entityClass.getMethods()){
-                StringBuilder sb = new StringBuilder();
-                for(Class type : method.getParameterTypes()){
-                    sb.append(type.getSimpleName()+",");
-                }
-                Log.e(TAG,String.format("method:%s,return:%s,param:%s",method.getName(),method.getReturnType().getSimpleName(),sb.toString()));
-            }*/
-            Method method = entityClass.getMethod("inflate", LayoutInflater.class,ViewGroup.class,boolean.class);//get method from name "inflate";
-            B vBind = (B) method.invoke(entityClass,LayoutInflater.from(parent.getContext()),parent,false);//execute method to create a objct of viewbind;
-            return new ViewBindHolder(vBind);
-        } catch (Exception e) {
-            e.printStackTrace();
+        if(viewType == 1 ){
+            // get genericity "B"
+            Class<B> entityClass = (Class<B>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
+            try {
+               /* for(Method method: entityClass.getMethods()){
+                    StringBuilder sb = new StringBuilder();
+                    for(Class type : method.getParameterTypes()){
+                        sb.append(type.getSimpleName()+",");
+                    }
+                    Log.e(TAG,String.format("method:%s,return:%s,param:%s",method.getName(),method.getReturnType().getSimpleName(),sb.toString()));
+                }*/
+                Method method = entityClass.getMethod("inflate", LayoutInflater.class,ViewGroup.class,boolean.class);//get method from name "inflate";
+                B vBind = (B) method.invoke(entityClass,LayoutInflater.from(parent.getContext()),parent,false);//execute method to create a objct of viewbind;
+                return new ViewBindHolder(vBind);
+            } catch (SecurityException e) {
+                e.printStackTrace();
+            } catch (NoSuchMethodException e) {
+                e.printStackTrace();
+            } catch (IllegalArgumentException e) {
+                e.printStackTrace();
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            } catch (InvocationTargetException e) {
+                Throwable t = e.getTargetException();// 获取目标异常
+                t.printStackTrace();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         }
-        return new NullViewHolder( LayoutNullBinding.inflate(LayoutInflater.from(parent.getContext())));
-    }
-
-    /**
-     *
-     * 创建视图
-     * @param parent
-     * @param layout  视图文件
-     * @param viewType 视图类型   1 加载正常视图   其他则加载空数据
-     * @return
-     */
-    protected View getRootView(@NonNull ViewGroup parent, @LayoutRes int layout,int viewType ){
-        //MyLog.i(TAG,"getRootView viewType:"+viewType);
-        return LayoutInflater.from(parent.getContext()).inflate(viewType==1?layout: R.layout.layout_null,parent,false);
+        return new NullViewHolder( LayoutNullBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false));
     }
 
     @Override
     public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
         //MyLog.i(TAG,"onBindViewHolder position:"+position+" "+mData.size()+" "+getItemViewType(position));
-        if(getItemViewType(position)==0){
-            return;
+        if(activity == null){
+            activity = (BaseActivity) holder.itemView.getContext();
         }
-        try {
-            activity = (A) holder.itemView.getContext();
-        }catch (Exception e){}
-        bindView((ViewBindHolder) holder,mData.size()==0?null:mData.get(position),position);
+        if(getItemViewType(position)==0){
+            bindView((NullViewHolder) holder);
+        }else {
+            bindView((ViewBindHolder) holder, mData.size() == 0 ? null : mData.get(position), position);
+        }
     }
 
     /**
@@ -127,6 +125,10 @@
     protected abstract void bindView(ViewBindHolder holder,T data,int position);
 
 
+    protected void bindView(NullViewHolder holder){
+
+    }
+
     @Override
     public int getItemCount() {
         //默认显示空视图,若不显示空视图则重写该方法,返回mData.size()
@@ -138,17 +140,27 @@
     public int getItemViewType(int position) {
         //当下标为0,数据集合为0 返回0(意味当前应显示空数据视图))
         //MyLog.i(TAG,"getItemViewType position:"+position+" mdata:"+mData.size()+" "+(position ==0 && mData.size()==0));
-        return position ==0 && mData.size()==0?0:1;
+        return position == 0 && mData.size()==0?0:1;
     }
 
     public class ViewBindHolder extends RecyclerView.ViewHolder{
-
-        B binding;
-
+        public B binding;
         public ViewBindHolder( B binding) {
             super(binding.getRoot());
             this.binding = binding;
         }
     }
+    /**
+     * 空数据显示
+     * Created by Administrator on 2021/10/28 0028.
+     */
+    public class NullViewHolder extends RecyclerView.ViewHolder {
+        LayoutNullBinding binding;
+
+        public NullViewHolder(LayoutNullBinding binding) {
+            super(binding.getRoot());
+            this.binding = binding;
+        }
+    }
 
 }

--
Gitblit v1.9.1