仿QQ未读消息

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38913065/article/details/78499584

先看效果:第一条是已读,第二条是未读

点击第一个:

点击标记未读:

点击删除:

这是第三方的控件SwipeMenuListView,需要导入到studio中,

代码:

1.bean类:

package com.example.administrator.qq;

public class Msg {
    public int id;
    public String title;
    public String desc;
    public boolean isRead; // false是未读;true是已读

    @Override
    public String toString() {
        return "Msg{" + "id=" + id + ", title='" + title + '\'' +
                ", desc='" + desc + '\'' + ", isRead=" + isRead + '}';
    }
}
2.适配器:

package com.example.administrator.qq;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;

public class MyMsgAdapter extends BaseAdapter {

    private Activity mContext;
    private LayoutInflater mInflater;
    private List<Msg> mDatas;
    public MyMsgAdapter(Activity context, List<Msg> datas) {
        mContext = context;
        mInflater = LayoutInflater.from(mContext);
        mDatas = datas;
    }

    @Override
    public int getCount() {
        return (mDatas != null ? mDatas.size() : 0);
    }

    @Override
    public Object getItem(int position) {
        return (mDatas != null ? mDatas.get(position) : null);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        Msg myMsg = mDatas.get(position);
        boolean isRead = myMsg.isRead;
        if (isRead) {
            return 0;
        } else {
            return 1;
        }
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            // 下拉项布局
            convertView = mInflater.inflate(R.layout.list_item_my_msg, null);
            holder = new ViewHolder();
            holder.img_msg = (ImageView) convertView.findViewById(R.id.img_msg);
            holder.text_msg_user_name = (TextView) convertView.findViewById(R.id.text_msg_user_name);
            holder.text_msg_infos = (TextView) convertView.findViewById(R.id.text_msg_infos);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        final Msg myMsg = mDatas.get(position);

        if (myMsg != null) {

            if (myMsg.isRead) {//未读
                holder.img_msg.setImageResource(R.mipmap.readed_msg_img);
            } else {
                holder.img_msg.setImageResource(R.mipmap.unread_msg_img);
            }

            holder.text_msg_user_name.setText(myMsg.title);
            holder.text_msg_infos.setText(myMsg.desc);
        }

        return convertView;
    }

    class ViewHolder {
        ImageView img_msg;
        TextView text_msg_user_name;
        TextView text_msg_infos;
    }
}
3.MainActivity:

package com.example.administrator.qq;

import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.TypedValue;
import android.view.View;
import android.widget.AdapterView;
import com.example.administrator.qq.swipemenulistview.SwipeMenu;
import com.example.administrator.qq.swipemenulistview.SwipeMenuCreator;
import com.example.administrator.qq.swipemenulistview.SwipeMenuItem;
import com.example.administrator.qq.swipemenulistview.SwipeMenuListView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private MyMsgAdapter msgAdapter;
    // 消息集合
    private List<Msg> msgs;
    // 要删除的数据
    private Msg dMsg;
    // 要修改的数据
    private int oPos;
    private Msg oMyMsg;
    private SwipeMenuListView listViewMyMsgs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listViewMyMsgs = (SwipeMenuListView) findViewById(R.id.listViewMyMsgs);
        msgs = new ArrayList<Msg>();

        Msg msg1 = new Msg();
        msg1.id = 1;
        msg1.title = "刘婕";
        msg1.desc = "我欲与君相知,长命无绝衰";
        msg1.isRead = false;

        Msg msg2 = new Msg();
        msg2.id = 2;
        msg2.title = "爱在记忆中找你";
        msg2.desc = "如果可以恨你,全力痛恨你,连遇上亦要躲避";
        msg2.isRead = true;

        msgs.add(msg1);
        msgs.add(msg2);

        msgAdapter = new MyMsgAdapter(this, msgs);
        listViewMyMsgs.setAdapter(msgAdapter);

        createMenu();
    }

    private void deleteMsg(int position) {
        // DoDeleteMsgRequest(String id,Handler mHandler, int reqCode)
        dMsg = msgs.get(position);
        if (dMsg != null) {
            msgs.remove(dMsg);
            msgAdapter.notifyDataSetChanged();
        }
    }

    /**
     * 标记已读和未读
     *
     * @param position
     */
    private void readMsg(int position) {
        //DoReadMsgRequest(String id, String isRead, Handler mHandler, int reqCode)
        oPos = position;
        oMyMsg = msgs.get(position);
        if (oMyMsg != null) {
            msgs.get(position).isRead = !msgs.get(position).isRead;
            msgAdapter.notifyDataSetChanged();
        }
    }

    private void createMenu() {
        // step 1. create a MenuCreator
        SwipeMenuCreator creator = new SwipeMenuCreator() {
            @Override
            public void create(SwipeMenu menu) {
                switch (menu.getViewType()) {
                    case 0:// 未读
                        createMenu1(menu);
                        break;
                    case 1:// 已读
                        createMenu2(menu);
                        break;
                }
            }

            private void createMenu1(SwipeMenu menu) {
                SwipeMenuItem unreadItem = new SwipeMenuItem(getApplicationContext());
                unreadItem.setId(1);
                unreadItem.setBackground(new ColorDrawable(Color.parseColor("#555555")));
                unreadItem.setWidth(dp2px(90));
                unreadItem.setTitle("标为已读");
                unreadItem.setTitleSize(16);
                unreadItem.setTitleColor(Color.parseColor("#FFFFFF"));
                menu.addMenuItem(unreadItem);

                SwipeMenuItem deleteItem = new SwipeMenuItem(getApplicationContext());
                deleteItem.setId(0);
                deleteItem.setBackground(new ColorDrawable(Color.parseColor("#EF4B3A")));
                deleteItem.setWidth(dp2px(90));
                deleteItem.setTitle("删除");
                deleteItem.setTitleSize(16);
                deleteItem.setTitleColor(Color.parseColor("#FFFFFF"));
                menu.addMenuItem(deleteItem);
            }

            private void createMenu2(SwipeMenu menu) {
                SwipeMenuItem readedItem = new SwipeMenuItem(getApplicationContext());
                readedItem.setId(2);
                readedItem.setBackground(new ColorDrawable(Color.parseColor("#555555")));
                readedItem.setWidth(dp2px(90));
                readedItem.setTitle("标记未读");
                readedItem.setTitleSize(16);
                readedItem.setTitleColor(Color.parseColor("#FFFFFF"));
                menu.addMenuItem(readedItem);

                SwipeMenuItem deleteItem = new SwipeMenuItem(getApplicationContext());
                deleteItem.setId(0);
                deleteItem.setBackground(new ColorDrawable(Color.parseColor("#EF4B3A")));
                deleteItem.setWidth(dp2px(90));
                deleteItem.setTitle("删除");
                deleteItem.setTitleSize(16);
                deleteItem.setTitleColor(Color.parseColor("#FFFFFF"));
                menu.addMenuItem(deleteItem);
            }
        };
        // set creator
        listViewMyMsgs.setMenuCreator(creator);
        // step 2. listener item click event
        listViewMyMsgs.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
                SwipeMenuItem menuItem = menu.getMenuItem(index);
                int id = menuItem.getId();
                switch (id) {
                    case 0:
                        deleteMsg(position);
                        break;
                    case 1:
                        readMsg(position);
                        break;
                    case 2:
                        readMsg(position);
                        break;
                }
                return false;
            }
        });
        listViewMyMsgs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                Msg myMsg = (Msg) adapterView.getAdapter().getItem(position);
                if (myMsg != null) {
                    if (myMsg.isRead) { // 如果是未读,需要标记为已读
                        readMsg(position);
                    }
                }
            }
        });
    }

    private int dp2px(int dp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
                getResources().getDisplayMetrics());
    }
}
4.布局:
activity_main:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administrator.qq.MainActivity">

    <com.example.administrator.qq.swipemenulistview.SwipeMenuListView
        android:id="@+id/listViewMyMsgs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></com.example.administrator.qq.swipemenulistview.SwipeMenuListView>
</RelativeLayout>
item:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerVertical="true">

    <ImageView
        android:id="@+id/img_msg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20px"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/text_msg_user_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20px"
        android:layout_toRightOf="@id/img_msg"
        android:text="v卖点卡买" />

    <TextView
        android:id="@+id/text_msg_infos"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/text_msg_user_name"
        android:layout_toRightOf="@id/img_msg"
        android:text="v卖点卡买" />
</RelativeLayout>


猜你喜欢

转载自blog.csdn.net/qq_38913065/article/details/78499584
今日推荐