49申请与通知的适配器的完成
来源:互联网 发布:淘宝全球购是什么意思 编辑:程序博客网 时间:2024/04/29 01:21
需要注意的是:
1.ListView的优化(ViewHolder加convertView)
2.添加后需要更新数据库
3.adapter中怎么去调用runOnUiThread方法。
package com.dystu.impro.adapter;import java.util.List;import android.app.Activity;import android.app.ProgressDialog;import android.content.ContentValues;import android.content.Context;import android.text.TextUtils;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import com.dystu.impro.R;import com.dystu.impro.db.dao.InviteMessgeDao;import com.dystu.impro.domain.InviteMessage;import com.dystu.impro.domain.InviteMessage.InviteMesageStatus;import com.easemob.chat.EMChatManager;import com.easemob.chat.EMGroupManager;public class NewFriendsMsgAdapter extends ArrayAdapter<InviteMessage> {private Context context;private InviteMessgeDao messgeDao;public NewFriendsMsgAdapter(Context context, int textViewResourceId,List<InviteMessage> objects) {super(context, textViewResourceId, objects);this.context = context;messgeDao = new InviteMessgeDao(context);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {final ViewHolder holder;if (convertView == null) {holder = new ViewHolder();convertView = View.inflate(context, R.layout.row_invite_msg, null);holder.avator = (ImageView) convertView.findViewById(R.id.avatar);holder.reason = (TextView) convertView.findViewById(R.id.message);holder.name = (TextView) convertView.findViewById(R.id.name);holder.status = (Button) convertView.findViewById(R.id.user_state);holder.groupContainer = (LinearLayout) convertView.findViewById(R.id.ll_group);holder.groupname = (TextView) convertView.findViewById(R.id.tv_groupName);convertView.setTag(holder);}else {holder = (ViewHolder) convertView.getTag();}final InviteMessage msg = getItem(position);if (msg!=null) {if (msg.getGroupId() != null) {//显示群聊提示holder.groupContainer.setVisibility(View.VISIBLE);holder.groupname.setText(msg.getGroupName());}else {holder.groupContainer.setVisibility(View.GONE);}holder.reason.setText(msg.getReason());holder.name.setText(msg.getFrom());if (msg.getStatus() == InviteMesageStatus.BEAGREED) {holder.status.setVisibility(View.INVISIBLE);holder.reason.setText("已同意你的好友请求");}else if (msg.getStatus() == InviteMesageStatus.BEINVITEED || msg.getStatus() == InviteMesageStatus.BEAPPLYED) {holder.status.setVisibility(View.VISIBLE);holder.status.setText("同意");if (msg.getStatus() == InviteMesageStatus.BEINVITEED) { if (msg.getReason() == null) { // 如果没写理由 holder.reason.setText("请求加你为好友"); } } else { // 入群申请 if (TextUtils.isEmpty(msg.getReason())) { holder.reason.setText("申请加入群:" + msg.getGroupName()); } } // 设置点击事件 holder.status.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 同意别人发的好友请求 acceptInvitation(holder.status, msg); } });}else if (msg.getStatus() == InviteMesageStatus.AGREED) { holder.status.setText("已同意"); holder.status.setBackgroundDrawable(null); holder.status.setEnabled(false); } else if (msg.getStatus() == InviteMesageStatus.REFUSED) { holder.status.setText("已拒绝"); holder.status.setBackgroundDrawable(null); holder.status.setEnabled(false); }}return convertView;}/** * 同意好友请求或者群申请 * @param button * @param msg */protected void acceptInvitation(final Button button, final InviteMessage msg) { final ProgressDialog pd = new ProgressDialog(context); pd.setMessage("正在同意..."); pd.setCanceledOnTouchOutside(false); pd.show(); new Thread(new Runnable() { public void run() { // 调用sdk的同意方法 try { if (msg.getGroupId() == null) // 同意好友请求 EMChatManager.getInstance().acceptInvitation( msg.getFrom()); else // 同意加群申请 EMGroupManager.getInstance().acceptApplication( msg.getFrom(), msg.getGroupId()); ((Activity) context).runOnUiThread(new Runnable() { @Override public void run() { pd.dismiss(); button.setText("已同意"); msg.setStatus(InviteMesageStatus.AGREED); // 更新db ContentValues values = new ContentValues(); values.put(InviteMessgeDao.COLUMN_NAME_STATUS, msg .getStatus().ordinal()); messgeDao.updateMessage(msg.getId(), values); button.setBackgroundDrawable(null); button.setEnabled(false); } }); } catch (final Exception e) { ((Activity) context).runOnUiThread(new Runnable() { @Override public void run() { pd.dismiss(); Toast.makeText(context, "同意失败: " + e.getMessage(), 1).show(); } }); } } }).start(); }private static class ViewHolder{/** * 用户头像 */ImageView avator;/** * 用户名 */TextView name;/** * * 请求原因 */TextView reason;/** * * 同意或者拒绝 */Button status;/** * 群组的线性布局 * */LinearLayout groupContainer;/** * 群组名字 */TextView groupname;}}
0 0
- 49申请与通知的适配器的完成
- 50申请与通知的完成
- 48申请与通知的适配器记载的item布局
- View的绘制完成通知
- 类适配器与对象适配器的区别
- 类适配器与对象适配器的区别
- [转]关于暂停百宝箱业务合作申请的通知
- GdkPixbuf 的申请与释放
- 内存的申请与释放
- 内存的申请与释放
- 【技巧】通过适配器模式完成栈的数据结构
- ListView与适配器的使用
- IRP的同步完成与异步完成
- IRP的同步完成与异步完成
- KVO与通知的区别
- 安卓中适配器的内容已经改变但ListView没有收到通知。确保您的适配器的内容不在后台线程
- 适配器的使用与字符串的转换
- IRP的传递与完成
- LTE 4G基站定位
- Eclipse添加断点无效,断点图标有斜线
- Oracle执行计划详解
- Median of Two Sorted Arrays
- 项目一遇到的一些问题及其解决方法
- 49申请与通知的适配器的完成
- 计算二进制数的0的个数
- VMWARE ESXI 创建共享磁盘柜 做群集
- apache负载均衡配置详解
- JVM内存配置
- shell操作mysql
- 《羊年展望》中国改革蹄疾经济求稳 新思维应对新常态
- hadoop
- Powershell: schedule job in Powershell