fix 修复空聊天信息从通讯录返回时闪退问题

This commit is contained in:
zlzw 2024-03-16 10:54:05 +08:00
parent c30f18eaa9
commit 9c54cfca2a
6 changed files with 53 additions and 27 deletions

View File

@ -20,7 +20,7 @@ import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message; import io.rong.imlib.model.Message;
import io.rong.imlib.model.MessageContent; import io.rong.imlib.model.MessageContent;
@MessageTag(value = "MessageChatCardContent", flag = MessageTag.ISPERSISTED) @MessageTag(value = "MessageChatCardContent", flag = MessageTag.ISCOUNTED)
public class MessageChatCardContent extends MessageContent implements Parcelable { public class MessageChatCardContent extends MessageContent implements Parcelable {
private String cover; private String cover;
private String title; private String title;

View File

@ -8,14 +8,17 @@ import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.ListUtils; import com.yunbao.common.utils.ListUtils;
import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.ViewUtils;
import com.yunbao.common.utils.WordUtil; import com.yunbao.common.utils.WordUtil;
import com.yunbao.main.R; import com.yunbao.main.R;
@ -34,7 +37,7 @@ public class MainConversationListAdapter extends ConversationListAdapter {
public static final int TYPE_SEARCH_CHAT = 520; public static final int TYPE_SEARCH_CHAT = 520;
private List<BaseUiConversation> srcList; private List<BaseUiConversation> srcList;
private Context mContext; private Context mContext;
private View emptyView; private boolean isChat=true;
public MainConversationListAdapter(Context mContext) { public MainConversationListAdapter(Context mContext) {
this.mContext = mContext; this.mContext = mContext;
@ -44,7 +47,9 @@ public class MainConversationListAdapter extends ConversationListAdapter {
@Override @Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ViewHolder holder = null; ViewHolder holder = null;
mContext = parent.getContext(); if (mContext == null) {
mContext = parent.getContext();
}
if (viewType == TYPE_SEARCH_TITLE) { if (viewType == TYPE_SEARCH_TITLE) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_msg_search_title, parent, false); View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_msg_search_title, parent, false);
holder = ViewHolder.createViewHolder(parent.getContext(), view); holder = ViewHolder.createViewHolder(parent.getContext(), view);
@ -54,10 +59,11 @@ public class MainConversationListAdapter extends ConversationListAdapter {
} else if (viewType == TYPE_SEARCH_CHAT) { } else if (viewType == TYPE_SEARCH_CHAT) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_msg_search_chat, parent, false); View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_msg_search_chat, parent, false);
holder = ViewHolder.createViewHolder(parent.getContext(), view); holder = ViewHolder.createViewHolder(parent.getContext(), view);
} else { } else if (viewType != -200) {
// holder = super.onCreateViewHolder(parent, viewType); View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rc_conversationlist_item, parent, false);
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_msg_search_empty, parent, false);
holder = ViewHolder.createViewHolder(parent.getContext(), view); holder = ViewHolder.createViewHolder(parent.getContext(), view);
} else {
holder = super.onCreateViewHolder(parent, viewType);
} }
return holder; return holder;
} }
@ -74,7 +80,7 @@ public class MainConversationListAdapter extends ConversationListAdapter {
} else if (!StringUtil.isEmpty(objectName) && objectName.startsWith("SEARCH_TITLE")) { } else if (!StringUtil.isEmpty(objectName) && objectName.startsWith("SEARCH_TITLE")) {
type = TYPE_SEARCH_TITLE; type = TYPE_SEARCH_TITLE;
} }
} else { } else if (mDataList.isEmpty() || isEmpty() || srcList.isEmpty()) {
type = -200; type = -200;
} }
return type; return type;
@ -83,7 +89,7 @@ public class MainConversationListAdapter extends ConversationListAdapter {
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (isEmpty() || mDataList.isEmpty()) { if (isEmpty() || mDataList.isEmpty()) {
bindEmpty(holder, position); bindEmpty(holder, position);
return; return;
} }
if (getItemViewType(position) == TYPE_SEARCH_USER) { if (getItemViewType(position) == TYPE_SEARCH_USER) {
@ -92,26 +98,35 @@ public class MainConversationListAdapter extends ConversationListAdapter {
bindChat(holder, position); bindChat(holder, position);
} else if (getItemViewType(position) == TYPE_SEARCH_TITLE) { } else if (getItemViewType(position) == TYPE_SEARCH_TITLE) {
bindTitle(holder, position); bindTitle(holder, position);
} else { } else if (getItemViewType(position) != -200) {
super.onBindViewHolder(holder, position); super.onBindViewHolder(holder, position);
} }
} }
private void bindEmpty(ViewHolder holder, int position) { private void bindEmpty(ViewHolder holder, int position) {
((ViewGroup) holder.getView(R.id.layout)).addView(emptyView); if(isChat){
ViewUtils.findViewById(holder.itemView,R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_message_not_chat_list);
ViewUtils.findViewById(holder.itemView,R.id.textView, TextView.class).setText(R.string.not_data_message_chat_list);
}else{
ViewUtils.findViewById(holder.itemView,R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_message_not_search);
ViewUtils.findViewById(holder.itemView,R.id.textView, TextView.class).setText(R.string.not_data_message_chat_list_search);
}
} }
@Override @Override
public void setDataCollection(List<BaseUiConversation> data) { public void setDataCollection(List<BaseUiConversation> data) {
super.setDataCollection(data);
if (srcList == null) { if (srcList == null) {
srcList = new ArrayList<>(); srcList = new ArrayList<>();
} }
mDataList.clear();
srcList.clear(); srcList.clear();
if (mContext == null)
mContext = AppManager.getInstance().getLastActivity();
for (BaseUiConversation item : data) { for (BaseUiConversation item : data) {
BaseUiConversation cn = new SingleConversation(mContext, item.mCore); BaseUiConversation cn = new SingleConversation(mContext, item.mCore);
srcList.add(cn); srcList.add(cn);
} }
super.setDataCollection(data);
} }
public List<BaseUiConversation> getSrcList() { public List<BaseUiConversation> getSrcList() {
@ -125,10 +140,6 @@ public class MainConversationListAdapter extends ConversationListAdapter {
holder.setText(R.id.title, mDataList.get(position).mCore.getObjectName().replace("SEARCH_TITLE", "")); holder.setText(R.id.title, mDataList.get(position).mCore.getObjectName().replace("SEARCH_TITLE", ""));
} }
@Override
public void setEmptyView(View view) {
this.emptyView = view;
}
private void bindUser(ViewHolder holder, int position) { private void bindUser(ViewHolder holder, int position) {
ImgLoader.display(holder.getContext(), mDataList.get(position).mCore.getPortraitUrl(), holder.getView(R.id.rc_conversation_portrait)); ImgLoader.display(holder.getContext(), mDataList.get(position).mCore.getPortraitUrl(), holder.getView(R.id.rc_conversation_portrait));
@ -182,4 +193,12 @@ public class MainConversationListAdapter extends ConversationListAdapter {
RouteUtils.routeToConversationActivity(view.getContext(), mDataList.get(position).mCore.getConversationType(), mDataList.get(position).mCore.getTargetId()); RouteUtils.routeToConversationActivity(view.getContext(), mDataList.get(position).mCore.getConversationType(), mDataList.get(position).mCore.getTargetId());
}); });
} }
public void setChat() {
isChat=true;
}
public void setSearch() {
isChat=false;
}
} }

View File

@ -47,6 +47,7 @@ public class MainMessageChatFragment extends ConversationListFragment {
public void search(String search) { public void search(String search) {
((MainConversationListAdapter)mAdapter).setSearch();
getContactsList(search); getContactsList(search);
} }
@ -75,7 +76,6 @@ public class MainMessageChatFragment extends ConversationListFragment {
} }
} }
mAdapter.getData().clear();
if (data.size() == 1) { if (data.size() == 1) {
data.get(0).mCore.setMentionedCount(3); data.get(0).mCore.setMentionedCount(3);
} else if (data.size() != 0) { } else if (data.size() != 0) {
@ -115,14 +115,12 @@ public class MainMessageChatFragment extends ConversationListFragment {
} }
list.addAll(data); list.addAll(data);
mAdapter.setDataCollection(list); mAdapter.setDataCollection(list);
mAdapter.notifyDataSetChanged();
} }
@Override @Override
public void onError(RongIMClient.ErrorCode e) { public void onError(RongIMClient.ErrorCode e) {
ToastUtil.show("搜索出错了:" + e.getMessage()); ToastUtil.show("搜索出错了:" + e.getMessage());
mAdapter.setDataCollection(list); mAdapter.setDataCollection(list);
mAdapter.notifyDataSetChanged();
} }
}); });
@ -130,7 +128,7 @@ public class MainMessageChatFragment extends ConversationListFragment {
} }
public void onChatList() { public void onChatList() {
mAdapter.getData().clear(); ((MainConversationListAdapter)mAdapter).setChat();
subscribeUi(); subscribeUi();
} }

View File

@ -95,7 +95,6 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
private EditText search; private EditText search;
XPopup.Builder moreXPopup; XPopup.Builder moreXPopup;
private String homeZdyPop; private String homeZdyPop;
private View emptyView;
public MainMessageViewHolder setHomeZdyPop(String homeZdyPop) { public MainMessageViewHolder setHomeZdyPop(String homeZdyPop) {
this.homeZdyPop = homeZdyPop; this.homeZdyPop = homeZdyPop;
@ -141,7 +140,6 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
contacts = findViewById(R.id.news_icon_contacts); contacts = findViewById(R.id.news_icon_contacts);
more = findViewById(R.id.news_icon_more); more = findViewById(R.id.news_icon_more);
search = findViewById(R.id.search); search = findViewById(R.id.search);
emptyView = LayoutInflater.from(getContentView().getContext()).inflate(R.layout.view_layout_msg, getRootView(), false);
contacts.setOnClickListener(view -> { contacts.setOnClickListener(view -> {
//通讯录 //通讯录
RouteUtil.forwardActivity(RouteUtil.PATH_ADDRESSBOOK); RouteUtil.forwardActivity(RouteUtil.PATH_ADDRESSBOOK);
@ -162,12 +160,8 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
public void afterTextChanged(Editable editable) { public void afterTextChanged(Editable editable) {
if (conversationListFragment == null) return; if (conversationListFragment == null) return;
if (StringUtil.isEmpty(editable.toString())) { if (StringUtil.isEmpty(editable.toString())) {
ViewUtils.findViewById(emptyView,R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_message_not_chat_list);
ViewUtils.findViewById(emptyView,R.id.textView, TextView.class).setText(R.string.not_data_message_chat_list);
conversationListFragment.onChatList(); conversationListFragment.onChatList();
} else { } else {
ViewUtils.findViewById(emptyView,R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_message_not_search);
ViewUtils.findViewById(emptyView,R.id.textView, TextView.class).setText(R.string.not_data_message_chat_list_search);
conversationListFragment.search(editable.toString()); conversationListFragment.search(editable.toString());
} }
} }
@ -256,7 +250,8 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
transaction.replace(R.id.container, conversationListFragment); transaction.replace(R.id.container, conversationListFragment);
transaction.commit(); transaction.commit();
//自定义空数据背景View //自定义空数据背景View
conversationListFragment.setEmptyView(emptyView); //conversationListFragment.setEmptyView(emptyView);
conversationListFragment.setEmptyView(R.layout.view_layout_msg);
//刷新列表内用户信息 //刷新列表内用户信息
ConversationIMListManager.get(mContext).addUserInfoProvider(); ConversationIMListManager.get(mContext).addUserInfoProvider();
} }

View File

@ -11,6 +11,7 @@
android:layout_height="300dp" android:layout_height="300dp"
android:gravity="center" android:gravity="center"
android:orientation="vertical" android:orientation="vertical"
android:background="@color/blue"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"

View File

@ -78,7 +78,20 @@
android:textSize="@dimen/rc_font_auxiliary_size" /> android:textSize="@dimen/rc_font_auxiliary_size" />
</RelativeLayout> </RelativeLayout>
</RelativeLayout> </RelativeLayout>
<TextView
android:id="@+id/rc_conversation_content"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="12dp"
android:layout_marginTop="4dp"
android:text="你好,朋友!"
android:visibility="gone"
android:textColor="#777777"
android:textSize="11sp"
app:layout_constraintEnd_toStartOf="@+id/rc_conversation_title"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"
app:layout_constraintTop_toBottomOf="@+id/rc_conversation_title" />
<TextView <TextView
android:id="@+id/rc_conversation_title" android:id="@+id/rc_conversation_title"
android:layout_width="0dp" android:layout_width="0dp"