From fadd3294d9a0f3530ef33200541257d4478b93d7 Mon Sep 17 00:00:00 2001 From: lzl <1239365383@qq.com> Date: Tue, 4 Nov 2025 16:39:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=BF=E5=9C=BA=20=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=A1=A5=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/libs.versions.toml | 2 +- .../java/com/xscm/moduleutil/BaseEvent.java | 1 - .../moduleutil/adapter/CirleListAdapter.java | 107 ++--- .../adapter/GiftTwoDetailsFragment.java | 12 - .../adapter/OneImageYuanJiaoAdapter.java | 41 -- .../moduleutil/base/CommonAppContext.java | 26 -- .../xscm/moduleutil/bean/CircleListBean.java | 42 +- .../xscm/moduleutil/bean/HeadlineBean.java | 3 + .../com/xscm/moduleutil/bean/MqttXlhEnd.java | 2 + .../moduleutil/bean/room/RoomUpPitBean.java | 2 + .../moduleutil/diff/CircleDiffCallback.kt | 72 ++++ .../com/xscm/moduleutil/event/CabinEvent.java | 2 + .../xscm/moduleutil/event/EffectEvent.java | 2 + .../moduleutil/event/FloatingScreenEvent.java | 2 + .../moduleutil/event/GiftRewardEvent.java | 2 + .../com/xscm/moduleutil/event/HourlyBean.java | 2 + .../com/xscm/moduleutil/event/MqttBean.java | 2 + .../com/xscm/moduleutil/event/MusicEvent.java | 3 + .../com/xscm/moduleutil/event/PlazaEvent.java | 20 + .../xscm/moduleutil/event/RoomFaceEvent.java | 2 + .../moduleutil/event/RoomGiftGiveEvent.java | 2 + .../xscm/moduleutil/event/SurfaceEvent.java | 2 + .../moduleutil/event/UnreadCountEvent.java | 3 + .../dialog/RewardGiftDialogFragment.java | 54 --- .../src/main/res/layout/item_cirle_list.xml | 12 - .../java/com/xscm/modulemain/Application.kt | 31 ++ .../activity/main/activity/MainActivity.java | 7 + .../plaza/activity/DynamicDetailActivity.java | 175 ++++---- .../plaza/activity/DynamicListActivity.java | 155 +++++-- .../plaza/activity/ReleaseActivity.java | 1 + .../plaza/contacts/CircleContacts.java | 14 +- .../fragment/CircleCategoryFragment.java | 189 +++++---- .../plaza/fragment/CircleFragment.java | 58 ++- .../plaza/fragment/ExpandColumnFragment.java | 20 +- .../plaza/presenter/CirclePresenter.java | 55 ++- .../activity/room/fragment/VoiceFragment.java | 34 -- .../user/conacts/UserHomepageConacts.java | 2 +- .../user/fragment/CirleListFragment.java | 11 +- .../user/presenter/UserHomepagePresenter.java | 2 +- .../src/main/res/drawable/tab_indicator.xml | 20 + .../res/layout/activity_dynamic_detail.xml | 6 +- .../src/main/res/layout/activity_main.xml | 385 +++++++++--------- .../main/res/layout/activity_ranking_list.xml | 47 +-- .../res/layout/fragment_circle_category.xml | 20 - 44 files changed, 900 insertions(+), 752 deletions(-) create mode 100644 moduleUtil/src/main/java/com/xscm/moduleutil/diff/CircleDiffCallback.kt create mode 100644 moduleUtil/src/main/java/com/xscm/moduleutil/event/PlazaEvent.java create mode 100644 modulemain/src/main/res/drawable/tab_indicator.xml diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 16a6b757..19c00861 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -39,7 +39,7 @@ arouterCompiler = "1.5.2" arouterApi = "1.5.2" comSquareupRetrofit2Retrofit3 = "2.9.0" fastjson = "1.2.60" -githubBaserecyclerviewadapterhelper = "2.9.30" +githubBaserecyclerviewadapterhelper = "2.9.50" gsonVersion = "2.10.1" eventbusAnnotationProcessorVersion = "3.3.1" eventbusVersion = "3.3.1" diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/BaseEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/BaseEvent.java index 8b71a188..3627286e 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/BaseEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/BaseEvent.java @@ -3,7 +3,6 @@ package com.xscm.moduleutil; import lombok.Data; import lombok.EqualsAndHashCode; -@EqualsAndHashCode(callSuper = false) @Data public class BaseEvent { } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/adapter/CirleListAdapter.java b/moduleUtil/src/main/java/com/xscm/moduleutil/adapter/CirleListAdapter.java index 39b071b5..77ce1f28 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/adapter/CirleListAdapter.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/adapter/CirleListAdapter.java @@ -4,6 +4,7 @@ import static android.view.View.GONE; import static android.view.View.VISIBLE; import static com.blankj.utilcode.util.ActivityUtils.startActivity; +import android.os.Bundle; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextPaint; @@ -43,14 +44,15 @@ public class CirleListAdapter extends BaseQuickAdapter payloads) { + super.convertPayloads(helper, item, payloads); + if (payloads.isEmpty()) { + convert(helper, item); + } else { + Object payload = payloads.get(0); + if (payload instanceof Bundle) { + Bundle diff = (Bundle) payload; + if (diff.containsKey("like_num")) { + helper.setText(R.id.dy_fabulous, diff.getString("like_num")); + if (diff.containsKey("is_like")){ + if (diff.getInt("is_like") == 1) { + helper.setImageResource(R.id.dianzan_image, R.mipmap.dongtai_hudong_yidianzan); + } else { + helper.setImageResource(R.id.dianzan_image, com.xscm.moduleutil.R.mipmap.dongtai_hudong_dianzan); + } + } + } + + + if (diff.containsKey("comment_num")) { + helper.setText(R.id.dy_comment, diff.getString("comment_num")); + } + if (diff.containsKey("rewards_num")) { + double rewardNum = diff.getString("rewards_num") != null ? Double.parseDouble(item.getRewards_num()) : 0; + helper.setText(R.id.dy_zs, NumberFormatUtils.formatRewardNumber(rewardNum)); + } + } + } + } + @Override protected void convert(BaseViewHolder helper, CircleListBean item) { helper.addOnClickListener(com.xscm.moduleutil.R.id.dianzan) @@ -89,8 +131,8 @@ public class CirleListAdapter extends BaseQuickAdapter { - if (mListener != null){ - mListener.onDianzanClick(item); + if (mListener != null) { + mListener.onDianzanClick(helper.getPosition(),item); } }); @@ -99,11 +141,11 @@ public class CirleListAdapter extends BaseQuickAdapter { - if (mListener != null) mListener.onZsClick(item); + if (mListener != null) mListener.onZsClick(helper.getPosition(),item); }); helper.getView(R.id.diandian).setOnClickListener(v -> { - if (mListener != null) mListener.onDiandianClick(item); + if (mListener != null) mListener.onMoreClick(helper.getPosition(),item); }); helper.getView(R.id.pinglun).setOnClickListener(v -> { @@ -163,7 +205,7 @@ public class CirleListAdapter extends BaseQuickAdapter { FullScreenUtil.showFullScreenDialog(mContext, position, oneImageYuanJiaoAdapter.getList_adapter()); }); - }else { + } else { helper.getView(R.id.dy_image_recyc).setVisibility(View.GONE); } - if (item.getLike_list() == null){ + if (item.getLike_list() == null) { helper.getView(R.id.rela).setVisibility(GONE); helper.getView(R.id.view).setVisibility(VISIBLE); - }else { + } else { helper.getView(R.id.rela).setVisibility(VISIBLE); helper.getView(R.id.view).setVisibility(GONE); - RecyclerView recyclerView= helper.getView(R.id.recycle_view); + RecyclerView recyclerView = helper.getView(R.id.recycle_view); recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); LikeUserAdapter likeUserAdapter = new LikeUserAdapter<>(); recyclerView.setAdapter(likeUserAdapter); likeUserAdapter.setNewData(item.getLike_list()); - helper.setText(R.id.pinglun_tv, item.getLike_num()+"人点赞"); + helper.setText(R.id.pinglun_tv, item.getLike_num() + "人点赞"); } } - public static final String PAYLOAD_LIKE = "like"; - public void updateLikeStatusOnly(int position, int isLike) { - notifyItemChanged(position, PAYLOAD_LIKE); - } - - - - @Override - public void onBindViewHolder(@NonNull BaseViewHolder holder, int position, @NonNull List payloads) { - if (payloads.isEmpty()) { - onBindViewHolder(holder, position); // 全量绑定 - } else { - for (Object payload : payloads) { - if (payload.equals(PAYLOAD_LIKE)) { - CircleListBean item = getData().get(position); - if (item.getIs_like() == 1) { - holder.setImageResource(R.id.dianzan_image, R.mipmap.dongtai_hudong_yidianzan); - holder.setText(R.id.dy_fabulous, String.valueOf(Integer.parseInt(item.getLike_num()) + 1)); - } else { - holder.setImageResource(R.id.dianzan_image, com.xscm.moduleutil.R.mipmap.dongtai_hudong_dianzan); - holder.setText(R.id.dy_fabulous, item.getLike_num()); - } - } - } - } - } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/adapter/GiftTwoDetailsFragment.java b/moduleUtil/src/main/java/com/xscm/moduleutil/adapter/GiftTwoDetailsFragment.java index 07e38372..277ff5bd 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/adapter/GiftTwoDetailsFragment.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/adapter/GiftTwoDetailsFragment.java @@ -109,16 +109,6 @@ public class GiftTwoDetailsFragment extends BaseMvpFragment { private Context context; - -// public OneImageYuanJiaoAdapter(Context context) { -// this.context = context; -// } - public OneImageYuanJiaoAdapter(Context context) { this.context = context; } - -// @Override -// protected void convert(BaseViewHolder helper, String item) { -// helper.addOnClickListener(R.id.fiv); -// -// helper.setVisible(R.id.ll_del, false); -// QMUIRadiusImageView image = helper.getView(R.id.fiv); -// RequestOptions options = new RequestOptions() -// .centerCrop() -// .placeholder(R.color.white) -// .diskCacheStrategy(DiskCacheStrategy.ALL); -// Glide.with(mContext) -// .load(item) -// .apply(options) -// .into(image); -// } - @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder VH; @@ -53,10 +31,8 @@ public class OneImageYuanJiaoAdapter extends MyBaseAdapter { VH.iv_del.setVisibility(View.GONE); if (!TextUtils.isEmpty(list_adapter.get(position))) { - ImageUtils.loadHeadCC(list_adapter.get(position),VH.tv_title); } -// return convertView; } @@ -64,27 +40,10 @@ public class OneImageYuanJiaoAdapter extends MyBaseAdapter { public static class ViewHolder { RoundedImageView tv_title; ImageView iv_del; - RelativeLayout layoutImg; public ViewHolder(View convertView) { tv_title = convertView.findViewById(R.id.fiv); iv_del = convertView.findViewById(R.id.iv_del); -// layoutImg = convertView.findViewById(R.id.layout_img); -// -// int screenWidth = QMUIDisplayHelper.getScreenWidth(BaseApplication.mApplication) - QMUIDisplayHelper.dp2px(BaseApplication.mApplication, 24); -// -// int imgWidth = screenWidth*1/3-QMUIDisplayHelper.dp2px(BaseApplication.mApplication, 10); -// -// RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) layoutImg.getLayoutParams(); -// params.width = imgWidth; -// params.height = imgWidth; -// layoutImg.setLayoutParams(params); -// -// params = (RelativeLayout.LayoutParams) tv_title.getLayoutParams(); -// params.width = imgWidth; -// params.height = imgWidth; -// tv_title.setLayoutParams(params); - } } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java b/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java index b74d2880..edb6cb75 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java @@ -786,32 +786,6 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio } } - //static 代码段可以防止内存泄露 - static { - //设置全局的Header构建器 - SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() { - @Override - public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) { - ClassicsHeader header = new ClassicsHeader(context); - header.setDrawableSize(20); - header.setFinishDuration(0); - return header;//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header -// return new CustomRefreshHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header - } - }); - //设置全局的Footer构建器 - SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() { - @Override - public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) { - ClassicsFooter classicsFooter = new ClassicsFooter(context); - classicsFooter.setDrawableSize(20); - classicsFooter.setFinishDuration(0); - //指定为经典Footer,默认是 BallPulseFooter - return classicsFooter; - } - }); - } - @Override public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) { diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/CircleListBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/CircleListBean.java index d205aed6..e9360649 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/CircleListBean.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/CircleListBean.java @@ -11,28 +11,28 @@ import lombok.Data; */ @Data public class CircleListBean { - private int id;//语圈ID - private int user_id;//用户ID - private String nickname;//用户昵称 - private String avatar;//用户头像 - private int is_like;//我是否点赞(0没有,1点赞) - private int sex;//性别 1男2女 - private String content;//内容 - private String like_num;//点赞数 - private String rewards_num; //打赏金额 - private String is_room;//作者是否在房间中(1在,0不在) - private String room_id;//作者所在房间ID (is_room =0 此值小于0 ) - private String comment_num;//评论数 - private int is_recommend;//1非推荐2推荐 - private String ip;//活跃地址 - private String images;////图片 JSON字符串 封面获取第一张 - private String createtime;//时间 - private String topic_id; - private String share_url; - private List title;//话题列表 + public int id;//语圈ID + public int user_id;//用户ID + public String nickname;//用户昵称 + public String avatar;//用户头像 + public int is_like;//我是否点赞(0没有,1点赞) + public int sex;//性别 1男2女 + public String content;//内容 + public String like_num;//点赞数 + public String rewards_num; //打赏金额 + public String is_room;//作者是否在房间中(1在,0不在) + public String room_id;//作者所在房间ID (is_room =0 此值小于0 ) + public String comment_num;//评论数 + public int is_recommend;//1非推荐2推荐 + public String ip;//活跃地址 + public String images;////图片 JSON字符串 封面获取第一张 + public String createtime;//时间 + public String topic_id; + public String share_url; + public List title;//话题列表 - private String read_num;//阅读数 - private List like_list; + public String read_num;//阅读数 + public List like_list; @Data diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/HeadlineBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/HeadlineBean.java index f8de909e..4d3ce445 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/HeadlineBean.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/HeadlineBean.java @@ -5,11 +5,14 @@ import com.xscm.moduleutil.BaseEvent; import java.io.Serializable; import lombok.Data; +import lombok.EqualsAndHashCode; + /** *@author qx *@data 2025/7/10 *@description:发布头条需要的参数 */ +@EqualsAndHashCode(callSuper = true) @Data public class HeadlineBean extends BaseEvent implements Serializable { private String countdown; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/MqttXlhEnd.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/MqttXlhEnd.java index 8d419ff7..8820db05 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/MqttXlhEnd.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/MqttXlhEnd.java @@ -3,9 +3,11 @@ package com.xscm.moduleutil.bean; import com.xscm.moduleutil.BaseEvent; import lombok.Data; +import lombok.EqualsAndHashCode; import java.io.Serializable; +@EqualsAndHashCode(callSuper = true) @Data public class MqttXlhEnd extends BaseEvent implements Serializable { private static final long serialVersionUID = 1L; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomUpPitBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomUpPitBean.java index 816d1291..d753cd52 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomUpPitBean.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomUpPitBean.java @@ -4,7 +4,9 @@ package com.xscm.moduleutil.bean.room; import com.xscm.moduleutil.BaseEvent; import lombok.Data; +import lombok.EqualsAndHashCode; +@EqualsAndHashCode(callSuper = true) @Data public class RoomUpPitBean extends BaseEvent { private String id; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/diff/CircleDiffCallback.kt b/moduleUtil/src/main/java/com/xscm/moduleutil/diff/CircleDiffCallback.kt new file mode 100644 index 00000000..e6ddb9b7 --- /dev/null +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/diff/CircleDiffCallback.kt @@ -0,0 +1,72 @@ +package com.xscm.moduleutil.diff + +import android.os.Bundle +import androidx.recyclerview.widget.DiffUtil +import com.xscm.moduleutil.bean.CircleListBean + + +class CircleListDiffCallback( + private val oldList: List?, + private val newList: List? +) : + DiffUtil.Callback() { + override fun getOldListSize(): Int { + return oldList?.size ?: 0 + } + + override fun getNewListSize(): Int { + return newList?.size ?: 0 + } + + override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + return oldList!![oldItemPosition].id == newList!![newItemPosition].id + } + + override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + val oldItem = oldList!![oldItemPosition] + val newItem = newList!![newItemPosition] + + // 判断核心数据是否一致(排除动态字段) + if (!equalsStr(oldItem.nickname, newItem.nickname)) return false + if (!equalsStr(oldItem.avatar, newItem.avatar)) return false + if (!equalsStr(oldItem.content, newItem.content)) return false + if (oldItem.is_like != newItem.is_like) return false + if (oldItem.sex != newItem.sex) return false + if (!equalsStr(oldItem.images, newItem.images)) return false + + // 动态字段不参与整体比较(让 getChangePayload 控制) + return equalsStr(oldItem.rewards_num, newItem.rewards_num) + && equalsStr(oldItem.like_num, newItem.like_num) + && equalsStr(oldItem.comment_num, newItem.comment_num) +// && equalsStr(oldItem.read_num, newItem.read_num) + } + + override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? { + val oldItem = oldList!![oldItemPosition] + val newItem = newList!![newItemPosition] + + val diff = Bundle() + + if (!equalsStr(oldItem.rewards_num, newItem.rewards_num)) { + diff.putString("rewards_num", newItem.rewards_num) + } + if (!equalsStr(oldItem.like_num, newItem.like_num)) { + diff.putString("like_num", newItem.like_num) + diff.putInt("is_like",newItem.is_like) + } + if (!equalsStr(oldItem.comment_num, newItem.comment_num)) { + diff.putString("comment_num", newItem.comment_num) + } +// if (!equalsStr(oldItem.read_num, newItem.read_num)) { +// diff.putString("read_num", newItem.read_num) +// } + + return if (diff.size() == 0) null else diff + } + + private fun equalsStr(a: String?, b: String?): Boolean { + if (a == null && b == null) return true + if (a == null || b == null) return false + return a == b + } +} diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/CabinEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/CabinEvent.java index a0d06b3a..9dfb2f31 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/CabinEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/CabinEvent.java @@ -3,7 +3,9 @@ package com.xscm.moduleutil.event; import com.xscm.moduleutil.BaseEvent; import lombok.Data; +import lombok.EqualsAndHashCode; +@EqualsAndHashCode(callSuper = true) @Data public class CabinEvent extends BaseEvent { private boolean joined; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/EffectEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/EffectEvent.java index 4bc633a3..1fa36d75 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/EffectEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/EffectEvent.java @@ -4,12 +4,14 @@ import com.xscm.moduleutil.BaseEvent; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; /** *@author qx *@data 2025/6/23 *@description: 特效设置 */ +@EqualsAndHashCode(callSuper = true) @Data @NoArgsConstructor @AllArgsConstructor diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/FloatingScreenEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/FloatingScreenEvent.java index c115eeba..56463c87 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/FloatingScreenEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/FloatingScreenEvent.java @@ -4,6 +4,7 @@ import com.xscm.moduleutil.BaseEvent; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; /** @@ -11,6 +12,7 @@ import lombok.NoArgsConstructor; *@data 2025/9/22 *@description: 关闭飘屏 */ +@EqualsAndHashCode(callSuper = true) @Data @NoArgsConstructor @AllArgsConstructor diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/GiftRewardEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/GiftRewardEvent.java index 3daa08ba..04b9d0b6 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/GiftRewardEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/GiftRewardEvent.java @@ -3,12 +3,14 @@ package com.xscm.moduleutil.event; import com.xscm.moduleutil.BaseEvent; import lombok.Data; +import lombok.EqualsAndHashCode; /** * @Author lxj$ * @Time 2025年7月30日01:35:52$ $ * @Description 打赏成功$ */ +@EqualsAndHashCode(callSuper = true) @Data public class GiftRewardEvent extends BaseEvent { private int points; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/HourlyBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/HourlyBean.java index 4f330ed0..7a455f0f 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/HourlyBean.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/HourlyBean.java @@ -3,12 +3,14 @@ package com.xscm.moduleutil.event; import com.xscm.moduleutil.BaseEvent; import lombok.Data; +import lombok.EqualsAndHashCode; import java.io.Serializable; /** * 小时榜飘屏 */ +@EqualsAndHashCode(callSuper = true) @Data public class HourlyBean extends BaseEvent implements Serializable { private static final long serialVersionUID = 1L; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/MqttBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/MqttBean.java index 5f52bf21..7b50a8e1 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/MqttBean.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/MqttBean.java @@ -13,12 +13,14 @@ import java.util.ArrayList; import java.util.List; import lombok.Data; +import lombok.EqualsAndHashCode; /** * @Author lxj$ * @Time $ $ * @Description 从声望获取到的参数$ */ +@EqualsAndHashCode(callSuper = true) @Data public class MqttBean extends BaseEvent { private String room_id; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/MusicEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/MusicEvent.java index 2e042d98..1d4cd804 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/MusicEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/MusicEvent.java @@ -3,11 +3,14 @@ package com.xscm.moduleutil.event; import com.xscm.moduleutil.BaseEvent; import lombok.Data; +import lombok.EqualsAndHashCode; + /** *@author qx *@data 2025/6/24 *@description: 背景音乐 */ +@EqualsAndHashCode(callSuper = true) @Data public class MusicEvent extends BaseEvent { } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/PlazaEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/PlazaEvent.java new file mode 100644 index 00000000..a8c54f92 --- /dev/null +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/PlazaEvent.java @@ -0,0 +1,20 @@ +package com.xscm.moduleutil.event; + +import com.xscm.moduleutil.BaseEvent; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@Data +@NoArgsConstructor +public class PlazaEvent extends BaseEvent { + public static final int DELETE_ZONE = 1009; + public static final int MODIFY_ZONE = 1008; + public static final int ADD_ZONE = 1007; + private int msgId; + private int type;//DELETE_ZONE : 删除 MODIFY_ZONE : 修改 ADD_ZONE : 新增 +} diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/RoomFaceEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/RoomFaceEvent.java index 737b25d4..bc2c2685 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/RoomFaceEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/RoomFaceEvent.java @@ -4,8 +4,10 @@ import com.xscm.moduleutil.BaseEvent; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +@EqualsAndHashCode(callSuper = true) @AllArgsConstructor @Data @NoArgsConstructor diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/RoomGiftGiveEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/RoomGiftGiveEvent.java index 3393fffa..9606e381 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/RoomGiftGiveEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/RoomGiftGiveEvent.java @@ -5,7 +5,9 @@ import com.xscm.moduleutil.BaseEvent; import com.xscm.moduleutil.bean.RoonGiftModel; import lombok.Data; +import lombok.EqualsAndHashCode; +@EqualsAndHashCode(callSuper = true) @Data public class RoomGiftGiveEvent extends BaseEvent { public String userId; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/SurfaceEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/SurfaceEvent.java index 4b0bf95f..a409ddf5 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/SurfaceEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/SurfaceEvent.java @@ -5,12 +5,14 @@ import android.view.SurfaceView; import com.xscm.moduleutil.BaseEvent; import lombok.Data; +import lombok.EqualsAndHashCode; /** * @Author lxj$ * @Time $ $ * @Description 判断是否是电影房$ */ +@EqualsAndHashCode(callSuper = true) @Data public class SurfaceEvent extends BaseEvent { diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/UnreadCountEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/UnreadCountEvent.java index 387b8eb5..faacf93c 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/event/UnreadCountEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/UnreadCountEvent.java @@ -3,11 +3,14 @@ package com.xscm.moduleutil.event; import com.xscm.moduleutil.BaseEvent; import lombok.Data; +import lombok.EqualsAndHashCode; + /** *@author qx *@data 2025/7/15 *@description: 这是im展示需要显示的未读消息数 */ +@EqualsAndHashCode(callSuper = true) @Data public class UnreadCountEvent extends BaseEvent { private long aLong; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/dialog/RewardGiftDialogFragment.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/dialog/RewardGiftDialogFragment.java index f009a47e..b2bebd45 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/dialog/RewardGiftDialogFragment.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/dialog/RewardGiftDialogFragment.java @@ -198,12 +198,6 @@ public class RewardGiftDialogFragment extends BaseMvpDialogFragment giftLabelBeans) { -// giftLabelBeanList = new ArrayList<>(); -// giftLabelBeanList.addAll(giftLabelBeans); -// GiftLabelBean giftLabelBean = new GiftLabelBean(); -// giftLabelBean.setId("0"); -// giftLabelBean.setName("背包"); -// giftLabelBeans.add(0, giftLabelBean); mBinding.viewPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), giftLabelBeans,fragmentList,"")); mBinding.slidingTabLayout.setViewPager(mBinding.viewPager); mBinding.slidingTabLayout.setCurrentTab(0); @@ -244,29 +238,8 @@ public class RewardGiftDialogFragment extends BaseMvpDialogFragment roonGiftModels,int type) { diff --git a/moduleUtil/src/main/res/layout/item_cirle_list.xml b/moduleUtil/src/main/res/layout/item_cirle_list.xml index 48600150..dfec5955 100644 --- a/moduleUtil/src/main/res/layout/item_cirle_list.xml +++ b/moduleUtil/src/main/res/layout/item_cirle_list.xml @@ -154,18 +154,6 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - - - - - - - - - - - + val header = ClassicsHeader(context) + header.setDrawableSize(20f) +// header.setFinishDuration(0) + header.setTextSizeTitle(12f) + header.setTextSizeTime(10f) + header + } + + //设置全局的Footer构建器 + SmartRefreshLayout.setDefaultRefreshFooterCreator { context, _ -> + val classicsFooter = ClassicsFooter(context) + classicsFooter.setDrawableSize(20f) +// classicsFooter.setFinishDuration(0) + classicsFooter.setTextSizeTitle(12f) + //指定为经典Footer,默认是 BallPulseFooter + classicsFooter + } } } \ No newline at end of file diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java index 445e3289..5840866c 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java @@ -996,6 +996,13 @@ public class MainActivity extends BaseMvpActivity circleList = new ArrayList<>(); + @Override protected void initData() { @@ -79,15 +88,8 @@ public class DynamicDetailActivity extends BaseMvpActivity { + for (int i = 0; i < ActivityUtils.getActivityList().size(); i++) { + if (ActivityUtils.getActivityList().get(i) instanceof DynamicDetailActivity || ActivityUtils.getActivityList().get(i) instanceof DynamicListActivity) { + ActivityUtils.getActivityList().get(i).finish(); + } + } + }); // ARouter.getInstance().build(ARouteConstants.ROOM_DETAILS).withString("form", "首页热门列表").withString("roomId", item.getRoom_id()).navigation(); - }else { - ChatLauncher.getInstance().launchC2CChat(DynamicDetailActivity.this, item.getUser_id()+""); + } else { + ChatLauncher.getInstance().launchC2CChat(DynamicDetailActivity.this, item.getUser_id() + ""); } } }); @@ -144,14 +153,6 @@ public class DynamicDetailActivity extends BaseMvpActivity { -// if (hasFocus) { -// new Handler(Looper.getMainLooper()).postDelayed(() -> { -// mBinding.scrollView.fullScroll(View.FOCUS_DOWN); -// }, 200); -// } -// }); - // 在 initData() 中添加: final View rootView = findViewById(android.R.id.content); final View inputBar = mBinding.clInput; @@ -180,20 +181,24 @@ public class DynamicDetailActivity extends BaseMvpActivity { mBinding.etInput.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.showSoftInput(mBinding.etInput, InputMethodManager.SHOW_IMPLICIT); }); - - } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEvent(GiftRewardEvent event) { - MvpPre.topicId(zone_id, 2); -// cirleListAdapter.notifyItemChanged(event.getPoints()); } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEvent(BaseEvent event) { + if (event instanceof GiftRewardEvent) { + MvpPre.getCircleDetail(((GiftRewardEvent) event).getPoints(), + circleList.get(((GiftRewardEvent) event).getPoints())); + EventBus.getDefault().post(new PlazaEvent(circleList.get(((GiftRewardEvent) event).getPoints()).id, PlazaEvent.MODIFY_ZONE)); + } + } + private void onClick(View view) { if (view.getId() == R.id.tv_send) { if (mBinding.etInput.getText().toString().isEmpty()) { @@ -235,7 +240,7 @@ public class DynamicDetailActivity extends BaseMvpActivity list) { + public void getCircleList(List list) { } @@ -245,21 +250,31 @@ public class DynamicDetailActivity extends BaseMvpActivity oldList = new ArrayList<>(cirleListAdapter.getData()); + circleList.set(idx, newItem); + DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new CircleListDiffCallback(oldList, circleList), false); + cirleListAdapter.setNewDiffData(diffResult, circleList); + + EventBus.getDefault().post(new PlazaEvent(circleList.get(idx).id, PlazaEvent.MODIFY_ZONE)); + } + + @Override + public void deleteZone(int index) { + EventBus.getDefault().post(new PlazaEvent(circleList.get(index).id, PlazaEvent.DELETE_ZONE)); + finish(); } @Override public void setCircleDetail(CircleListBean bean) { - List beanList = new ArrayList<>(); - beanList.add(bean); - cirleListAdapter.setNewData(beanList); - MvpPre.getCommentList(zone_id, "1", "10"); + circleList.add(bean); + cirleListAdapter.setNewData(circleList); + MvpPre.getCommentList(zone_id, "1", "30"); } @Override @@ -268,14 +283,12 @@ public class DynamicDetailActivity extends BaseMvpActivity { // 点击“取消”按钮时什么都不做 - },false,0).show(); + }, false, 0).show(); } @Override - public void onCommentLongClick(CommentBean.CommentDetailsBean comment,CommentBean.CommentDetailsBean.Replies reply, int position) { - String[] options ; - if (comment.getUser_id() == SpUtil.getUserId()){ - options = new String[]{"复制", "删除", "回复", "取消"}; - }else { - if (reply!=null) { + public void onCommentLongClick(CommentBean.CommentDetailsBean comment, CommentBean.CommentDetailsBean.Replies reply, int position) { + String[] options; + if (comment.getUser_id() == SpUtil.getUserId()) { + options = new String[]{"复制", "删除", "回复", "取消"}; + } else { + if (reply != null) { if (reply.getUser_id() == SpUtil.getUserId()) { options = new String[]{"复制", "删除", "回复", "取消"}; } else { options = new String[]{"复制", "回复", "取消"}; } - }else { + } else { options = new String[]{"复制", "回复", "取消"}; } } @@ -391,7 +406,7 @@ public class DynamicDetailActivity extends BaseMvpActivity { - handleOptionClick(optionIndex, comment,reply, position); + handleOptionClick(optionIndex, comment, reply, position); bottomSheetDialog.dismiss(); }); @@ -413,30 +428,31 @@ public class DynamicDetailActivity extends BaseMvpActivity implements CircleContacts.View { private HeatedBean heatedBean; CirleListAdapter cirleListAdapter; + private List circleList = new ArrayList<>(); + @Override protected void initData() { - heatedBean= getIntent().getParcelableExtra("heatedBean"); + heatedBean = getIntent().getParcelableExtra("heatedBean"); mBinding.topBar.setTitle(heatedBean.getTitle()); - MvpPre.topicId(heatedBean.getTopic_id(),1); - ImageUtils.loadHeadCC(heatedBean.getPic(),mBinding.ivAvatar); + + MvpPre.topicId(heatedBean.getTopic_id(), 1); + + + ImageUtils.loadHeadCC(heatedBean.getPic(), mBinding.ivAvatar); mBinding.tvTitle.setText(heatedBean.getTitle()); - mBinding.tvDescription.setText(heatedBean.getCount()+"条动态"); - SpannableString spannableString=new SpannableString(heatedBean.getContent()); - spannableString.setSpan(new LeadingMarginSpan.Standard(36),0,heatedBean.getContent().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + mBinding.tvDescription.setText(heatedBean.getCount() + "条动态"); + SpannableString spannableString = new SpannableString(heatedBean.getContent()); + spannableString.setSpan(new LeadingMarginSpan.Standard(36), 0, heatedBean.getContent().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mBinding.tvContent.setText(spannableString); mBinding.recycleView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); @@ -58,40 +71,30 @@ public class DynamicListActivity extends BaseMvpActivity list) { - cirleListAdapter.setNewData(list); + public void getCircleList(List list) { + if (list == null || list.isEmpty()) + return; +// if (page == 1){ +// circleList.clear(); +// } +// +// List oldList = new ArrayList<>(cirleListAdapter.getData()); +// circleList.addAll(list); +// +// DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new CircleListDiffCallback(oldList, circleList), false); +// cirleListAdapter.setNewDiffData(diffResult,circleList); + circleList.addAll(list); + cirleListAdapter.setNewData(circleList); } @Override @@ -149,9 +161,8 @@ public class DynamicListActivity extends BaseMvpActivity oldList = new ArrayList<>(cirleListAdapter.getData()); + circleList.set(index, newItem); + DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new CircleListDiffCallback(oldList, circleList), false); + cirleListAdapter.setNewDiffData(diffResult, circleList); + } + + @Override + public void deleteZone(int index) { + if (ActivityUtils.getTopActivity() instanceof DynamicListActivity){ + EventBus.getDefault().post(new PlazaEvent(circleList.get(index).id, PlazaEvent.DELETE_ZONE)); + } + circleList.remove(index); + cirleListAdapter.notifyItemRemoved(index); + if (index != 0) { + cirleListAdapter.notifyItemRangeChanged(index, circleList.size() - index); // 修正后续索引 + } + } + + } \ No newline at end of file diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/activity/ReleaseActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/activity/ReleaseActivity.java index dac2ca31..1fd1e4e6 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/activity/ReleaseActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/activity/ReleaseActivity.java @@ -345,6 +345,7 @@ public class ReleaseActivity extends BaseMvpActivity list); - void setCircleList(List list); + void getCircleList(List list); void setExpandColumn(List list); - void setLikeZone(int type); + void setLikeZone(int index,CircleListBean item,int type); void setCircleDetail(CircleListBean bean); void getCommentList(CommentBean commentBean); void commentZone(); void finishComment(); + + void getCircleDetail(int index,CircleListBean item,CircleListBean newItem); + + void deleteZone(int index); } public interface IIndexPre extends IPresenter { @@ -38,11 +42,13 @@ public class CircleContacts { void getExpandColumn(String type,String page,String page_limit);//获取扩列数据 - void likeZone(String zone_id); + void likeZone(int index,CircleListBean item); + + void getCircleDetail(int index,CircleListBean item); void topicId(String topic_id,int type);//type:这是让区分是什么地方获得数据,type=1:动态列表,type=2:动态详情 - void deleteZone(String zone_id); + void deleteZone(int index,CircleListBean item); void getCommentList(String id,String page,String page_limit); void commentZone(String id,String content,String pid,String reply_to); diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/fragment/CircleCategoryFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/fragment/CircleCategoryFragment.java index e576192d..6f16ed4c 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/fragment/CircleCategoryFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/fragment/CircleCategoryFragment.java @@ -2,23 +2,25 @@ package com.xscm.modulemain.activity.plaza.fragment; import android.annotation.SuppressLint; import android.content.Intent; -import android.os.Bundle; import android.view.View; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; +import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.LinearLayoutManager; import com.alibaba.android.arouter.launcher.ARouter; -import com.xscm.modulemain.R; -import com.xscm.modulemain.adapter.CirleCategoryBannerAdapter; -import com.xscm.modulemain.databinding.FragmentCircleCategoryBinding; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener; +import com.xscm.modulemain.R; +import com.xscm.modulemain.activity.main.activity.MainActivity; import com.xscm.modulemain.activity.plaza.activity.DynamicListActivity; import com.xscm.modulemain.activity.plaza.contacts.CircleContacts; import com.xscm.modulemain.activity.plaza.presenter.CirclePresenter; +import com.xscm.modulemain.adapter.CirleCategoryBannerAdapter; +import com.xscm.modulemain.databinding.FragmentCircleCategoryBinding; +import com.xscm.modulemain.dialog.ShareDialog; import com.xscm.modulemain.manager.RoomManager; +import com.xscm.moduleutil.BaseEvent; import com.xscm.moduleutil.adapter.CirleListAdapter; import com.xscm.moduleutil.base.BaseMvpFragment; import com.xscm.moduleutil.bean.BaseListData; @@ -26,16 +28,16 @@ import com.xscm.moduleutil.bean.CircleListBean; import com.xscm.moduleutil.bean.CommentBean; import com.xscm.moduleutil.bean.ExpandColumnBean; import com.xscm.moduleutil.bean.HeatedBean; +import com.xscm.moduleutil.diff.CircleListDiffCallback; import com.xscm.moduleutil.event.GiftRewardEvent; +import com.xscm.moduleutil.event.PlazaEvent; import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.utils.ChatLauncher; import com.xscm.moduleutil.widget.dialog.RewardGiftDialogFragment; -import com.xscm.modulemain.dialog.ShareDialog; import com.zhpan.bannerview.indicator.DrawableIndicator; import com.zhpan.indicator.base.IIndicator; import com.zhpan.indicator.enums.IndicatorSlideMode; -import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -48,29 +50,22 @@ import java.util.List; public class CircleCategoryFragment extends BaseMvpFragment implements CircleContacts.View { CirleCategoryBannerAdapter cirleCategoryBannerAdapter; CirleListAdapter cirleListAdapter; - private int page; + private int page = 1; + private String pageLimit = "10"; + + private List circleList = new ArrayList<>(); public static CircleCategoryFragment newInstance() { return new CircleCategoryFragment(); } - @Override - public void onResume() { - super.onResume(); - page=1; - MvpPre.getCategories(); - MvpPre.getCircleList("1", "10"); - } - @Override protected void initData() { -// MvpPre.getCategories(); + page = 1; + MvpPre.getCategories(); + MvpPre.getCircleList("1", pageLimit); } - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } @SuppressLint("WrongConstant") @Override @@ -85,14 +80,11 @@ public class CircleCategoryFragment extends BaseMvpFragment { // 示例:跳转到房间详情页 if (data != null) { -// ARouter.getInstance().build(ARouteConstants.DYNAMIC_LIST) -// .withString("id", data.getId()).navigation(); Intent intent = new Intent(getActivity(), DynamicListActivity.class); intent.putExtra("heatedBean", data); startActivity(intent); @@ -101,44 +93,33 @@ public class CircleCategoryFragment extends BaseMvpFragment list) { // 将原始数据拆分为多个子列表,每个子列表最多包含4个元素 mBinding.constraintLayout.setVisibility(View.VISIBLE); // 添加到 bannerViewPager 的是分页后的列表 mBinding.bannerViewPager.create(baseListData(list, 4)); -// mBinding.bannerViewPager.addData(baseListData(list, 4)); } @Override - public void setCircleList(List list) { + public void getCircleList(List list) { + if (list == null || list.isEmpty()) + return; if (page == 1) { - cirleListAdapter.setNewData(new ArrayList<>()); - cirleListAdapter.setNewData(list); - }else { - if (list!=null && list.size() > 0){ - cirleListAdapter.addData(list); - } + circleList.addAll(list); + cirleListAdapter.setNewData(circleList); + } else { + List oldList = new ArrayList<>(cirleListAdapter.getData()); + circleList.addAll(list); + + DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new CircleListDiffCallback(oldList, circleList), false); + cirleListAdapter.setNewDiffData(diffResult, circleList); } } @Override public void setExpandColumn(List list) { - } @Override - public void setLikeZone(int type) { - if (type == 1) { - MvpPre.getCircleList(page + "", "10"); - } + public void setLikeZone(int index, CircleListBean item, int type) { + MvpPre.getCircleDetail(index, item); + } + + @Override + public void getCircleDetail(int index, CircleListBean item, CircleListBean newItem) { + List oldList = new ArrayList<>(cirleListAdapter.getData()); + circleList.set(index, newItem); + DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new CircleListDiffCallback(oldList, circleList), false); + cirleListAdapter.setNewDiffData(diffResult, circleList); } @Override public void setCircleDetail(CircleListBean bean) { - // 更新列表中的单个数据项(仅更新特定字段) if (cirleListAdapter != null && bean != null) { List dataList = cirleListAdapter.getData(); @@ -270,6 +300,21 @@ public class CircleCategoryFragment extends BaseMvpFragment implements CircleContacts.View { private List list; + + public static final int RELEASE_CODE = 1010; + private MyFragmentPagerAdapter adapter; + public static CircleFragment newInstance () { return new CircleFragment(); } @@ -39,24 +44,31 @@ public class CircleFragment extends BaseMvpFragment(); list.add(new MyBagBean("发现", "1")); list.add(new MyBagBean("扩列", "2")); - - mBinding.viewPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), list)); + adapter = new MyFragmentPagerAdapter(getChildFragmentManager(), list); + mBinding.viewPager.setAdapter(adapter); mBinding.tabLayout.setViewPager(mBinding.viewPager); mBinding.tabLayout.setCurrentTab(0); } @Override protected void initView () { - mBinding.ivRelease.setOnClickListener(this::onClick); } private void onClick(View view) { if (view.getId()==R.id.iv_release){//发布 - startActivity(new Intent(getContext(), ReleaseActivity.class)); + startActivityForResult(new Intent(getContext(), ReleaseActivity.class),RELEASE_CODE); } } + @Override + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode==RELEASE_CODE){ + adapter.refreshCircleCategoryData(); + } + } + @Override protected void initListener () { super.initListener(); @@ -79,7 +91,7 @@ public class CircleFragment extends BaseMvpFragment list) { + public void getCircleList(List list) { } @@ -89,7 +101,17 @@ public class CircleFragment extends BaseMvpFragment list; - + private SparseArray fragments = new SparseArray<>(); public MyFragmentPagerAdapter(FragmentManager fm, List list) { super(fm); @@ -126,11 +148,17 @@ public class CircleFragment extends BaseMvpFragment list) { + public void getCircleList(List list) { } @@ -200,7 +202,17 @@ public class ExpandColumnFragment extends BaseMvpFragment implemen @Override public void getCircleList(String page, String page_limit) { - api.getCircleList(page,page_limit,new BaseObserver>() { @Override public void onSubscribe(Disposable d) { @@ -58,7 +57,7 @@ public class CirclePresenter extends BasePresenter implemen if (MvpRef==null){ MvpRef=new WeakReference<>(mView); } - MvpRef.get().setCircleList(circleListBeans); + MvpRef.get().getCircleList(circleListBeans); MvpRef.get().finishComment(); } }); @@ -83,30 +82,11 @@ public class CirclePresenter extends BasePresenter implemen } }); - -// List images=new ArrayList<>(); -// images.add("https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=false&word=%E7%BE%8E%E5%A5%B3%E5%9B%BE%E7%89%87&hs=0&pn=0&spn=0&di=7490230549689139201&pi=0&rn=1&tn=baiduimagedetail&is=2160705940%2C3901940110&ie=utf-8&oe=utf-8&cl=2&lm=-1&cs=2056927850%2C430353020&os=2160705940%2C3901940110&simid=3513174432%2C352671812&adpicid=0&lpn=0&ln=0&fm=&sme=&cg=girl&bdtype=0&oriquery=&objurl=https%3A%2F%2Fq4.itc.cn%2Fimages01%2F20240627%2Fd30dbf39840a4c0bbeb277a6d773db2f.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bf5i7_z%26e3Bv54AzdH3FwAzdH3F0blaabmca_8d8n8lbaa&gsm=&islist=&querylist="); -// images.add("https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=false&word=%E7%BE%8E%E5%A5%B3%E5%9B%BE%E7%89%87&hs=0&pn=0&spn=0&di=7490230549689139201&pi=0&rn=1&tn=baiduimagedetail&is=2160705940%2C3901940110&ie=utf-8&oe=utf-8&cl=2&lm=-1&cs=2056927850%2C430353020&os=2160705940%2C3901940110&simid=3513174432%2C352671812&adpicid=0&lpn=0&ln=0&fm=&sme=&cg=girl&bdtype=0&oriquery=&objurl=https%3A%2F%2Fq4.itc.cn%2Fimages01%2F20240627%2Fd30dbf39840a4c0bbeb277a6d773db2f.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bf5i7_z%26e3Bv54AzdH3FwAzdH3F0blaabmca_8d8n8lbaa&gsm=&islist=&querylist="); -// images.add("https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=false&word=%E7%BE%8E%E5%A5%B3%E5%9B%BE%E7%89%87&hs=0&pn=0&spn=0&di=7490230549689139201&pi=0&rn=1&tn=baiduimagedetail&is=2160705940%2C3901940110&ie=utf-8&oe=utf-8&cl=2&lm=-1&cs=2056927850%2C430353020&os=2160705940%2C3901940110&simid=3513174432%2C352671812&adpicid=0&lpn=0&ln=0&fm=&sme=&cg=girl&bdtype=0&oriquery=&objurl=https%3A%2F%2Fq4.itc.cn%2Fimages01%2F20240627%2Fd30dbf39840a4c0bbeb277a6d773db2f.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bf5i7_z%26e3Bv54AzdH3FwAzdH3F0blaabmca_8d8n8lbaa&gsm=&islist=&querylist="); -// images.add("https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=false&word=%E7%BE%8E%E5%A5%B3%E5%9B%BE%E7%89%87&hs=0&pn=0&spn=0&di=7490230549689139201&pi=0&rn=1&tn=baiduimagedetail&is=2160705940%2C3901940110&ie=utf-8&oe=utf-8&cl=2&lm=-1&cs=2056927850%2C430353020&os=2160705940%2C3901940110&simid=3513174432%2C352671812&adpicid=0&lpn=0&ln=0&fm=&sme=&cg=girl&bdtype=0&oriquery=&objurl=https%3A%2F%2Fq4.itc.cn%2Fimages01%2F20240627%2Fd30dbf39840a4c0bbeb277a6d773db2f.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bf5i7_z%26e3Bv54AzdH3FwAzdH3F0blaabmca_8d8n8lbaa&gsm=&islist=&querylist="); -// List expandColumnBeans=new ArrayList<>(); -// for (int i = 0; i < 10; i++){ -// ExpandColumnBean bean=new ExpandColumnBean(); -// bean.setId(""+i); -// bean.setSex(i % 2 == 0 ? "2" : "1"); -// bean.setNickname("萌新驾到"+i); -// bean.setAvatar(""); -// bean.setBirthday("2023-05-05"); -// bean.setLoginip("西安市"); -// bean.setHome_bgimages(images); -// expandColumnBeans.add(bean); -// } -// MvpRef.get().setExpandColumn(expandColumnBeans); } @Override - public void likeZone(String zone_id) { - api.likeZone(zone_id, new BaseObserver() { + public void likeZone(int index,CircleListBean item) { + api.likeZone(item.getId()+"", new BaseObserver() { @Override public void onSubscribe(Disposable d) { addDisposable(d); @@ -117,7 +97,26 @@ public class CirclePresenter extends BasePresenter implemen if (MvpRef==null){ MvpRef=new WeakReference<>(mView); } - MvpRef.get().setLikeZone(2); + MvpRef.get().setLikeZone(index,item,2); + } + }); + } + + + @Override + public void getCircleDetail(int index,CircleListBean item) { + api.zoneDetail(item.getId()+"", new BaseObserver() { + @Override + public void onSubscribe(Disposable d) { + addDisposable(d); + } + + @Override + public void onNext(CircleListBean circleListBeans) { + if (MvpRef==null){ + MvpRef=new WeakReference<>(mView); + } + MvpRef.get().getCircleDetail(index,item,circleListBeans); } }); } @@ -136,7 +135,7 @@ public class CirclePresenter extends BasePresenter implemen if (MvpRef==null){ MvpRef=new WeakReference<>(mView); } - MvpRef.get().setCircleList(circleListBeans); + MvpRef.get().getCircleList(circleListBeans); } }); }else if (type == 2){//这是获取动态详情 @@ -158,8 +157,8 @@ public class CirclePresenter extends BasePresenter implemen } @Override - public void deleteZone(String zone_id) { - api.deleteZone(zone_id, new BaseObserver() { + public void deleteZone(int index,CircleListBean bean) { + api.deleteZone(bean.getId()+"", new BaseObserver() { @Override public void onSubscribe(Disposable d) { @@ -171,7 +170,7 @@ public class CirclePresenter extends BasePresenter implemen if (MvpRef==null){ MvpRef=new WeakReference<>(mView); } - MvpRef.get().setLikeZone(1); + MvpRef.get().deleteZone(index); } }); } diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceFragment.java index cfde9d6e..4c0b3213 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceFragment.java @@ -71,9 +71,6 @@ public class VoiceFragment extends BaseMvpFragment { -//// ARouter.getInstance().build(ARouteConstants.INDEX_RANKING_LIST).navigation(); -// }); mBinding.ivRoom3.setOnClickListener(v -> { Intent intent = new Intent(getContext(), SearchActivity.class); @@ -88,37 +85,6 @@ public class VoiceFragment extends BaseMvpFragment() { @Override diff --git a/modulemain/src/main/res/drawable/tab_indicator.xml b/modulemain/src/main/res/drawable/tab_indicator.xml new file mode 100644 index 00000000..fef18d35 --- /dev/null +++ b/modulemain/src/main/res/drawable/tab_indicator.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulemain/src/main/res/layout/activity_dynamic_detail.xml b/modulemain/src/main/res/layout/activity_dynamic_detail.xml index 0f7326df..4be2ec86 100644 --- a/modulemain/src/main/res/layout/activity_dynamic_detail.xml +++ b/modulemain/src/main/res/layout/activity_dynamic_detail.xml @@ -51,7 +51,7 @@ android:layout_margin="@dimen/dp_16" android:layout_marginTop="@dimen/dp_12" android:gravity="center|left" - android:text="全部评论(56)" + android:text="全部评论(0)" android:textColor="@color/color_FF333333" android:textSize="@dimen/sp_16" android:textStyle="bold" /> @@ -107,8 +107,8 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + tools:context=".activity.main.activity.MainActivity"> + + + android:layout_above="@+id/fly_bottom_btn" + android:clipChildren="false" /> - - + android:id="@+id/fly_bottom_btn" + android:layout_width="match_parent" + android:layout_height="@dimen/dp_60" + android:layout_alignParentBottom="true" + android:background="@color/transparent" + android:clipChildren="false"> + + - - + android:layout_marginTop="@dimen/dp_2" + android:layout_weight="1" + android:gravity="center" + android:orientation="vertical"> + android:id="@+id/im_sy" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:gravity="center_horizontal" + android:scaleType="fitXY" + android:src="@drawable/main_bottom_bar_icon_media" /> + android:id="@+id/tv_media" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/dp_2" + android:text="@string/main_tab1" + android:textColor="@drawable/text_color_two" + android:textSize="@dimen/sp_10" /> + android:id="@+id/rl_trend" + android:layout_width="@dimen/dp_0" + android:layout_height="match_parent" + android:layout_marginTop="@dimen/dp_2" + android:layout_weight="1" + android:gravity="center" + android:orientation="vertical"> + android:id="@+id/im_trend" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:gravity="center_horizontal" + android:scaleType="fitXY" + android:src="@drawable/main_bottom_bar_icon_tend" /> + android:id="@+id/tv_trend" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/dp_2" + android:text="@string/main_tab2" + android:textColor="@drawable/text_color_two" + android:textSize="@dimen/sp_10" /> + android:id="@+id/rl_news" + android:layout_width="@dimen/dp_0" + android:layout_height="match_parent" + android:layout_marginTop="@dimen/dp_2" + android:layout_weight="1" + android:gravity="center" + android:orientation="vertical"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="-3dp"> + android:id="@+id/iv_news" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_centerHorizontal="true" + android:layout_marginTop="3dp" + android:gravity="center_horizontal" + android:scaleType="fitXY" + android:src="@drawable/main_bottom_bar_icon_news" /> + android:id="@+id/tv_message" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/dp_10" + android:layout_toRightOf="@+id/iv_news" + android:background="@drawable/ease_bg_msg_count" + android:gravity="center" + android:paddingLeft="@dimen/dp_5" + android:paddingTop="1.5dp" + android:paddingRight="@dimen/dp_5" + android:paddingBottom="2dp" + android:textColor="@color/white" + android:textSize="@dimen/sp_8" + android:visibility="gone" + tools:text="99+" + tools:visibility="visible" /> + android:id="@+id/tv_news" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/iv_news" + android:layout_centerHorizontal="true" + android:layout_marginTop="@dimen/dp_2" + android:text="@string/main_tab3" + android:textColor="@drawable/text_color_two" + android:textSize="@dimen/sp_10" /> + android:id="@+id/rl_me" + android:layout_width="@dimen/dp_0" + android:layout_height="match_parent" + android:layout_marginTop="@dimen/dp_2" + android:layout_weight="1" + android:gravity="center" + android:orientation="vertical"> + android:id="@+id/im_me" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_centerInParent="true" + android:gravity="center_horizontal" + android:scaleType="fitXY" + android:src="@drawable/main_bottom_bar_icon_me" /> + android:id="@+id/tv_me" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/dp_2" + android:text="@string/main_tab4" + android:textColor="@drawable/text_color_two" + android:textSize="@dimen/sp_10" /> + android:id="@+id/ll" + android:layout_width="wrap_content" + android:layout_height="@dimen/dp_52" + android:layout_marginBottom="@dimen/dp_100" + android:gravity="center_vertical" + android:orientation="horizontal" + android:visibility="gone" + tools:visibility="visible"> + android:id="@+id/riv" + android:layout_width="@dimen/dp_45" + android:layout_height="@dimen/dp_45" + android:layout_gravity="center_vertical" + android:layout_margin="@dimen/dp_4" + android:src="@mipmap/default_avatar" + app:gav_border_color="#FFF" + app:gav_border_width="@dimen/dp_2" + app:riv_border_color="#FFF" + app:riv_border_width="@dimen/dp_2" + app:riv_oval="true" /> + android:layout_width="@dimen/dp_1" + android:layout_height="@dimen/dp_20" + android:layout_gravity="center_vertical" + android:layout_marginLeft="@dimen/dp_7" + android:layout_marginRight="@dimen/dp_7" + android:background="#FFFFFFFF" + android:visibility="visible" /> + android:id="@+id/iv_guanbi" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginRight="@dimen/dp_14" + android:src="@mipmap/icon_guanbi" /> - - - - - - - - - + + + + + + + + + + android:id="@+id/banner" + android:layout_width="@dimen/dp_75" + android:layout_height="@dimen/dp_85" + android:layout_alignParentEnd="true" + android:layout_alignParentBottom="true" + android:layout_marginEnd="@dimen/dp_20" + android:layout_marginBottom="@dimen/dp_100" + android:clickable="true" + android:focusable="true" + android:scaleType="fitCenter" + app:AutoPlayTime="3000" + app:pageChangeDuration="3000" + app:pointContainerPosition="BOTTOM" + app:pointNormal="@mipmap/room_ic_banner_point_normal" + app:pointSelect="@mipmap/room_ic_banner_point_select" + app:pointTopBottomPadding="@dimen/dp_2" + app:pointsPosition="CENTER" + app:pointsVisibility="true" /> + android:id="@+id/cool_wait_view" + android:layout_width="@dimen/dp_100" + android:layout_height="@dimen/dp_100" + android:layout_centerInParent="true" + android:background="@drawable/ps_ic_shadow_bg" + android:visibility="gone" + app:loading_renderer="CoolWaitLoadingRenderer" /> \ No newline at end of file diff --git a/modulemain/src/main/res/layout/activity_ranking_list.xml b/modulemain/src/main/res/layout/activity_ranking_list.xml index bdcd0714..97bf75ba 100644 --- a/modulemain/src/main/res/layout/activity_ranking_list.xml +++ b/modulemain/src/main/res/layout/activity_ranking_list.xml @@ -11,14 +11,13 @@ + android:orientation="vertical"> + + android:layout_height="wrap_content" /> - - - - - - - - - - - - - - - - - - - - - - - - + app:tabTextColor="@color/white" /> + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tabs" /> \ No newline at end of file diff --git a/modulemain/src/main/res/layout/fragment_circle_category.xml b/modulemain/src/main/res/layout/fragment_circle_category.xml index 59418b93..72d59cb4 100644 --- a/modulemain/src/main/res/layout/fragment_circle_category.xml +++ b/modulemain/src/main/res/layout/fragment_circle_category.xml @@ -33,26 +33,6 @@ - - - - - - - - - - - - - - - - - - - -