日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【高仿微信系列】02、消息列表ListView滑动删除

發布時間:2023/12/16 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【高仿微信系列】02、消息列表ListView滑动删除 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文為個人原創,歡迎轉載,但請務必在明顯位置注明出處!

GitHub地址:https://github.com/motianhuo/wechat

微信的消息列表中,向左滑動刪除Item效果不錯,咱們也實現一下。
咱借助Github大牛daimajia的一個開源庫來實現。AndroidSwipeLayout

感興趣的童鞋,可以研究研究,學習學習人家的屬性動畫是怎么實現的。
OK,開始了,看咱們的實現效果:

下面來看代碼:
先看Item layout_item_msg.xml 布局文件

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.juns.wechat"android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical" ><!-- SwipeLayout控件 --><com.juns.wechat.widght.swipe.SwipeLayout android:id="@+id/swipe"app:drag_edge="right"android:layout_width="match_parent"android:layout_height="wrap_content"><!-- 底層刪除按鈕布局 --><LinearLayout android:id="@+id/layout_back"android:background="@color/red"android:gravity="center"android:layout_width="80dp"android:layout_height="65.0dip"> <TextView android:id="@+id/txt_del"style="@style/MMFontTitleInList"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="刪除"android:textColor="@color/white"android:textSize="18sp"android:singleLine="true" /></LinearLayout><!-- 上層顯示布局 --><LinearLayout android:id="@+id/contactitem_layout"style="@style/MMListItem"android:layout_height="65.0dip"android:background="@color/white"android:paddingLeft="12dip"><RelativeLayout android:id="@+id/avatar_container"android:layout_width="59dp"android:layout_marginTop="4dp"android:layout_height="match_parent"android:layout_alignParentLeft="true"><ImageView android:id="@+id/contactitem_avatar_iv"android:layout_width="50.0dip"android:layout_height="50.0dip"android:src="@drawable/head" /><TextView android:id="@+id/unread_msg_number"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:background="@drawable/aii"android:gravity="center"android:textColor="@android:color/white"android:textSize="12sp" /></RelativeLayout><RelativeLayout android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1.0"android:orientation="vertical"android:paddingLeft="5dip"><TextView android:id="@+id/txt_name"style="@style/MMFontTitleInList"android:textColor="@color/black"android:singleLine="true" /><TextView android:id="@+id/txt_state"style="@style/MMFontTag"android:layout_below="@+id/txt_name" android:text="已讀"android:visibility="gone"android:background="@drawable/btn_bg_blue"android:layout_marginTop="5dp" /><TextView android:id="@+id/txt_content"style="@style/MMFontTitleInList"android:layout_below="@+id/txt_name"android:layout_toRightOf="@+id/txt_state"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:textSize="14sp"android:textColor="@color/black1"android:singleLine="true" /></RelativeLayout><TextView android:id="@+id/txt_time"style="@style/MMFontTitleInList"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginTop="10dp"android:layout_marginRight="10dp"android:gravity="top"android:textSize="12sp"android:singleLine="true" /></LinearLayout></com.juns.wechat.widght.swipe.SwipeLayout><View android:layout_width="match_parent"android:layout_height="1dp"android:background="@color/black2" /> </LinearLayout>

再看Adpter實現方式:NewMsgAdpter.java

package com.juns.wechat.adpter;import java.util.Date; import java.util.Hashtable; import java.util.List;import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import android.widget.TextView.BufferType;import com.easemob.chat.EMChatManager; import com.easemob.chat.EMConversation; import com.easemob.chat.EMMessage; import com.easemob.chat.ImageMessageBody; import com.easemob.chat.TextMessageBody; import com.easemob.util.DateUtils; import com.juns.wechat.GloableParams; import com.juns.wechat.R; import com.juns.wechat.bean.GroupInfo; import com.juns.wechat.bean.PublicMsgInfo; import com.juns.wechat.bean.User; import com.juns.wechat.chat.utils.Constant; import com.juns.wechat.chat.utils.SmileUtils; import com.juns.wechat.common.UserUtils; import com.juns.wechat.common.ViewHolder; import com.juns.wechat.dialog.WarnTipDialog; import com.juns.wechat.net.NetClient; import com.juns.wechat.widght.swipe.SwipeLayout;public class NewMsgAdpter extends BaseAdapter {protected Context context;private List<EMConversation> conversationList;private WarnTipDialog Tipdialog;private int deleteID;private String ChatID;private NetClient netClient;private String userid;private Hashtable<String, String> ChatRecord = new Hashtable<String, String>();public PublicMsgInfo PublicMsg = null;public NewMsgAdpter(Context ctx, List<EMConversation> objects) {context = ctx;conversationList = objects;netClient = new NetClient(ctx);userid = UserUtils.getUserID(context);}public void setPublicMsg(PublicMsgInfo Msg) {PublicMsg = Msg;}public PublicMsgInfo getPublicMsg() {return PublicMsg;}public Hashtable<String, String> getChatRecord() {return ChatRecord;}@Overridepublic int getCount() {return conversationList.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.layout_item_msg, parent, false);}ImageView img_avar = ViewHolder.get(convertView,R.id.contactitem_avatar_iv);TextView txt_name = ViewHolder.get(convertView, R.id.txt_name);TextView txt_state = ViewHolder.get(convertView, R.id.txt_state);TextView txt_del = ViewHolder.get(convertView, R.id.txt_del);TextView txt_content = ViewHolder.get(convertView, R.id.txt_content);TextView txt_time = ViewHolder.get(convertView, R.id.txt_time);TextView unreadLabel = ViewHolder.get(convertView,R.id.unread_msg_number);SwipeLayout swipe = ViewHolder.get(convertView, R.id.swipe);if (PublicMsg != null && position == 0) {txt_name.setText("訂閱號");img_avar.setImageResource(R.drawable.icon_public);txt_time.setText(PublicMsg.getTime());txt_content.setText(PublicMsg.getContent());unreadLabel.setText("3");unreadLabel.setVisibility(View.VISIBLE);swipe.setSwipeEnabled(false);} else {swipe.setSwipeEnabled(true);// 獲取與此用戶/群組的會話final EMConversation conversation = conversationList.get(position);// 獲取用戶username或者群組groupidChatID = conversation.getUserName();txt_del.setTag(ChatID);if (conversation.isGroup()) {GroupInfo info = GloableParams.GroupInfos.get(ChatID);if (info != null) {txt_name.setText(info.getGroup_name());img_avar.setImageResource(R.drawable.defult_group);// initGroupInfo(img_avar, txt_name);// 獲取群組信息}} else {User user = GloableParams.Users.get(ChatID);if (user != null) {txt_name.setText(user.getUserName());// initUserInfo(img_avar, txt_name);// 獲取用戶信息}}if (conversation.getUnreadMsgCount() > 0) {// 顯示與此用戶的消息未讀數unreadLabel.setText(String.valueOf(conversation.getUnreadMsgCount()));unreadLabel.setVisibility(View.VISIBLE);} else {unreadLabel.setVisibility(View.INVISIBLE);}if (conversation.getMsgCount() != 0) {// 把最后一條消息的內容作為item的message內容EMMessage lastMessage = conversation.getLastMessage();txt_content.setText(SmileUtils.getSmiledText(context,getMessageDigest(lastMessage, context)),BufferType.SPANNABLE);txt_time.setText(DateUtils.getTimestampString(new Date(lastMessage.getMsgTime())));if (lastMessage.status == EMMessage.Status.SUCCESS) {txt_state.setText("送達");// txt_state.setBackgroundResource(R.drawable.btn_bg_orgen);} else if (lastMessage.status == EMMessage.Status.FAIL) {txt_state.setText("失敗");// txt_state.setBackgroundResource(R.drawable.btn_bg_red);} else if (lastMessage.direct == EMMessage.Direct.RECEIVE) {txt_state.setText("已讀");txt_state.setBackgroundResource(R.drawable.btn_bg_blue);}}txt_del.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {deleteID = position;Tipdialog = new WarnTipDialog((Activity) context,"您確定要刪除該聊天嗎?");Tipdialog.setBtnOkLinstener(onclick);Tipdialog.show();}});}return convertView;}private DialogInterface.OnClickListener onclick = new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {EMConversation conversation = conversationList.get(deleteID);EMChatManager.getInstance().deleteConversation(conversation.getUserName());// Utils.showLongToast((Activity) context, "刪除成功");conversationList.remove(deleteID);notifyDataSetChanged();Tipdialog.dismiss();}};/*** 根據消息內容和消息類型獲取消息內容提示* * @param message* @param context* @return*/private String getMessageDigest(EMMessage message, Context context) {String digest = "";switch (message.getType()) {case LOCATION: // 位置消息if (message.direct == EMMessage.Direct.RECEIVE) {digest = getStrng(context, R.string.location_recv);String name = message.getFrom();if (GloableParams.UserInfos != null) {User user = GloableParams.Users.get(message.getFrom());if (null != user.getUserName())name = user.getUserName();}digest = String.format(digest, message.getFrom());return digest;} else {digest = getStrng(context, R.string.location_prefix);}break;case IMAGE: // 圖片消息ImageMessageBody imageBody = (ImageMessageBody) message.getBody();digest = getStrng(context, R.string.picture)+ imageBody.getFileName();break;case VOICE:// 語音消息digest = getStrng(context, R.string.voice_msg);break;case VIDEO: // 視頻消息digest = getStrng(context, R.string.video);break;case TXT: // 文本消息if (!message.getBooleanAttribute(Constant.MESSAGE_ATTR_IS_VOICE_CALL, false)) {TextMessageBody txtBody = (TextMessageBody) message.getBody();digest = txtBody.getMessage();} else {TextMessageBody txtBody = (TextMessageBody) message.getBody();digest = getStrng(context, R.string.voice_call)+ txtBody.getMessage();}break;case FILE: // 普通文件消息digest = getStrng(context, R.string.file);break;default:System.err.println("error, unknow type");return "";}return digest;}String getStrng(Context context, int resId) {return context.getResources().getString(resId);} }

OK,項目的完整代碼可以去 Github (點擊這里) 下載。

本系列文章會教你一步步打造自己的高仿微信APP,盡請關注本博客!

總結

以上是生活随笔為你收集整理的【高仿微信系列】02、消息列表ListView滑动删除的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。