易采站长站为您分析Android仿QQ滑动弹出菜单标记已读、未读消息的相关资料,需要的朋友可以参考下
在上一篇《Android仿微信滑动弹出编辑、删除菜单效果、增加下拉刷新功能》里,已经带着大家学习如何使用SwipeMenuListView这一开源库实现滑动列表弹出菜单,接下来,将进一步学习,如何为不同的list item呈现不同的菜单,此处我们做一个实例:Android 高仿QQ滑动弹出菜单标记已读、未读消息,看下效果图:

1. 创建项目,并导入SwipeMenuListView类库

2. 创建消息实体bean:
public class Msg {
public int id;
public String title;
public String desc;
// false是未读;true是已读
public boolean isRead;
@Override
public String toString() {
return "Msg{" +
"id=" + id +
", ", desc='" + desc + ''' +
", isRead=" + isRead +
'}';
}
}
注: 通过isRead字段,我们区分菜单显示“设为已读”“设为未读”;
3. 创建列表显示的Adapter,重写其中的getItemViewType方法:
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;
/**
* my msgs list adapter
*/
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;
}
}










