zoukankan      html  css  js  c++  java
  • 第一阶段冲刺---聊天记录查询

    今日完成

    • 聊天记录的查询

    聊天页面

    主fragment

    package com.example.meet.fragment;
    
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import androidx.annotation.NonNull;
    import androidx.fragment.app.Fragment;
    import androidx.fragment.app.FragmentManager;
    import androidx.fragment.app.FragmentStatePagerAdapter;
    import androidx.viewpager.widget.ViewPager;
    
    import com.example.meet.R;
    import com.example.meet.fragment.chat.AllFriendFragment;
    import com.example.meet.fragment.chat.CallRecordFragment;
    import com.example.meet.fragment.chat.ChatRecordFragment;
    import com.google.android.material.tabs.TabLayout;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * A simple {@link Fragment} subclass.
     */
    public class ChatFragment extends Fragment {
    
        private TabLayout mTabLayout;
        private ViewPager mViewPager;
    
        private String[] mTitle;
    
        private List<Fragment> mFragmentList = new ArrayList<>();
        private AllFriendFragment allFriendFragment;
        private CallRecordFragment callRecordFragment;
        private ChatRecordFragment chatRecordFragment;
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View view = inflater.inflate(R.layout.fragment_chat,null);
            initView(view);
            return view;
    
        }
    
        private void initView(View view) {
            mTabLayout = (TabLayout) view.findViewById(R.id.mTabLayout);
            mViewPager = (ViewPager) view.findViewById(R.id.mViewPager);
            //标题
            mTitle = new String[]{getString(R.string.text_chat_tab_title_1),
                    getString(R.string.text_chat_tab_title_2),
                    getString(R.string.text_chat_tab_title_3)};
    
            allFriendFragment = new AllFriendFragment();
            callRecordFragment = new CallRecordFragment();
            chatRecordFragment = new ChatRecordFragment();
            mFragmentList.add(chatRecordFragment);
            mFragmentList.add(callRecordFragment);
            mFragmentList.add(allFriendFragment);
    
            for (int i = 0; i < mTitle.length; i++) {
                mTabLayout.addTab(mTabLayout.newTab().setText(mTitle[i]));
            }
    
            mViewPager.setOffscreenPageLimit(mTitle.length);
            mViewPager.setAdapter(new ChatPagerAdapter(getFragmentManager()));
            mTabLayout.setupWithViewPager(mViewPager);
    
            mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    defTabStyle(tab,20);
                }
    
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
                    tab.setCustomView(null);
                }
    
                @Override
                public void onTabReselected(TabLayout.Tab tab) {
    
                }
            });
    
            //默认第一个选中
            defTabStyle(mTabLayout.getTabAt(0),20);
    
        }
    
        /**
         * 设置tab样式
         * @param tabAt
         * @param i
         */
        private void defTabStyle(TabLayout.Tab tabAt, int i) {
            View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_tab_text, null);
            TextView tv_table = view.findViewById(R.id.tv_tab);
            tv_table.setText(tabAt.getText());
            tv_table.setTextColor(Color.WHITE);
            tv_table.setTextSize(i);
            tabAt.setCustomView(tv_table);
        }
    
        class ChatPagerAdapter extends FragmentStatePagerAdapter{
    
            public ChatPagerAdapter( FragmentManager fm) {
                super(fm);
            }
    
            @Override
            public void destroyItem(@NonNull View container, int position, @NonNull Object object) {
    //            super.destroyItem(container, position, object);
            }
    
            @Override
            public Fragment getItem(int position) {
                return mFragmentList.get(position);
            }
    
            @Override
            public int getCount() {
                return mTitle.length;
            }
    
            @Override
            public CharSequence getPageTitle(int position) {
                return mTitle[position];
            }
        }
    }
    

    聊天记录fragment

    package com.example.meet.fragment.chat;
    
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Toast;
    
    import androidx.fragment.app.Fragment;
    import androidx.recyclerview.widget.DividerItemDecoration;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
    
    import com.example.framework.adapter.CommonAdapter;
    import com.example.framework.adapter.CommonViewHolder;
    import com.example.framework.bmob.BmobManager;
    import com.example.framework.bmob.MyMeetUser;
    import com.example.framework.cloud.CloudManager;
    import com.example.framework.gson.TextBean;
    import com.example.framework.utils.CommonUtils;
    import com.example.framework.utils.LogUtils;
    import com.example.meet.R;
    import com.example.meet.model.ChatRecordModel;
    import com.google.gson.Gson;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.List;
    
    import cn.bmob.v3.exception.BmobException;
    import cn.bmob.v3.listener.FindListener;
    import io.rong.imlib.RongIMClient;
    import io.rong.imlib.model.Conversation;
    import io.rong.message.TextMessage;
    
    /**
     * A simple {@link Fragment} subclass.
     */
    public class ChatRecordFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
    
        private SwipeRefreshLayout mChatRecordRefreshLayout;
        private RecyclerView mChatRecordView;
        private View emptyView;
    
        private CommonAdapter<ChatRecordModel> adapter;
        private List<ChatRecordModel> modelList = new ArrayList<>();
    
        public ChatRecordFragment() {
            // Required empty public constructor
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_chat_record, null);
            initView(view);
            return view;
        }
    
        private void initView(final View view) {
            mChatRecordRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.mChatRecordRefreshLayout);
            mChatRecordView = (RecyclerView) view.findViewById(R.id.mChatRecordView);
            emptyView = view.findViewById(R.id.item_empty_view);
    
            mChatRecordRefreshLayout.setOnRefreshListener(this);
            mChatRecordView.setLayoutManager(new LinearLayoutManager(getActivity()));
            mChatRecordView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL));
    
            //适配器
            adapter = new CommonAdapter<>(modelList, new CommonAdapter.OnBindDataListener<ChatRecordModel>() {
                @Override
                public void onBindViewHolder(ChatRecordModel model, CommonViewHolder viewHolder, int type, int position) {
                    viewHolder.setImageUrl(getActivity(),R.id.iv_photo,model.getPhotoUrl());
                    viewHolder.setText(R.id.tv_nickname,model.getNickName());
                    viewHolder.setText(R.id.tv_msg,model.getLastMsg());
                    viewHolder.setText(R.id.tv_time,model.getTime());
                    if (model.getUnReadNumber() == 0){
                        viewHolder.getView(R.id.tv_un_read).setVisibility(View.GONE);
                    }else {
                        viewHolder.getView(R.id.tv_un_read).setVisibility(View.VISIBLE);
                        viewHolder.setText(R.id.tv_un_read,model.getUnReadNumber() + "");
                    }
    
                }
    
                @Override
                public int getLayoutId(int type) {
                    return R.layout.layout_chat_record_item;
                }
            });
    
            mChatRecordView.setAdapter(adapter);
            queryChatRecord();
        }
    
        /**
         * 查询聊天列表
         */
        private void queryChatRecord() {
            mChatRecordRefreshLayout.setRefreshing(true);
            CloudManager.getInstance().getConversationList(new RongIMClient.ResultCallback<List<Conversation>>() {
                @Override
                public void onSuccess(List<Conversation> conversations) {
                    mChatRecordRefreshLayout.setRefreshing(false);
                    if (CommonUtils.isEmpty(conversations)){
                        //先把之前的列表情况,防止再次查询重复
                        if (modelList.size()>0){
                            modelList.clear();
                        }
                        LogUtils.e("进入查询:" + conversations.size());
                        for (int i = 0; i < conversations.size(); i++) {
    
                            final Conversation conversation = conversations.get(i);
                            //获取发送人的信息
                            String id = conversation.getTargetId();
                            //查询该人并填充数据
                            BmobManager.getInstance().queryUserById(id, new FindListener<MyMeetUser>() {
                                @Override
                                public void done(List<MyMeetUser> object, BmobException e) {
                                    if (e == null){
                                        if (CommonUtils.isEmpty(object)){
                                            MyMeetUser myMeetUser = object.get(0);
                                            ChatRecordModel chatRecordModel = new ChatRecordModel();
                                            chatRecordModel.setPhotoUrl(myMeetUser.getPhoto());
                                            chatRecordModel.setNickName(myMeetUser.getNickName());
                                            chatRecordModel.setTime(new SimpleDateFormat("HH:mm:ss")
                                                    .format(conversation.getReceivedTime()));
                                            chatRecordModel.setUnReadNumber(conversation.getUnreadMessageCount());
                                            //判断消息的类型
                                            String objectName = conversation.getObjectName();
                                            if (objectName.equals(CloudManager.MESSAGE_TYPE_TEXT)){
                                                TextMessage textMessage = (TextMessage) conversation.getLatestMessage();
                                                String msg = textMessage.getContent();
                                                TextBean textBean = new Gson().fromJson(msg, TextBean.class);
                                                if (textBean.getType().equals(CloudManager.TYPE_TEXT)){
                                                    chatRecordModel.setLastMsg(textBean.getMsg());
                                                    modelList.add(chatRecordModel);
                                                }
                                            }else if (objectName.equals(CloudManager.MESSAGE_TYPE_LOCATION)){
                                                chatRecordModel.setLastMsg(getString(R.string.text_chat_record_img));
                                                modelList.add(chatRecordModel);
                                            }else if (objectName.equals(CloudManager.MESSAGE_TYPE_VOICE)){
                                                chatRecordModel.setLastMsg(getString(R.string.text_chat_record_location));
                                                modelList.add(chatRecordModel);
                                            }
                                            adapter.notifyDataSetChanged();
                                            if (modelList.size() > 0){
                                                emptyView.setVisibility(View.GONE);
                                                mChatRecordView.setVisibility(View.VISIBLE);
                                            }else {
                                                emptyView.setVisibility(View.VISIBLE);
                                                mChatRecordView.setVisibility(View.GONE);
                                            }
                                        }
                                    }
                                }
                            });
                        }
                    }else {
                        mChatRecordRefreshLayout.setRefreshing(false);
                        emptyView.setVisibility(View.VISIBLE);
                        mChatRecordView.setVisibility(View.GONE);
                    }
    
                }
    
                @Override
                public void onError(RongIMClient.ErrorCode errorCode) {
                    mChatRecordRefreshLayout.setRefreshing(false);
                }
            });
        }
    
        @Override
        public void onRefresh() {
            if (mChatRecordRefreshLayout.isRefreshing()){
                queryChatRecord();
            }
        }
    }
    
    

    界面

  • 相关阅读:
    学了这么多年技术,为什么水平还是一般般?
    你能不用计算机来计算S=a+(a+1)+(a+2) + ...... + b的解的数目吗?
    迟来的2013年总结
    如何快速查找IP归属地
    Shiro 权限标签
    Shiro 权限注解
    Shiro 授权
    shiro 身份验证
    Kaptcha
    FastJson
  • 原文地址:https://www.cnblogs.com/wuren-best/p/12748266.html
Copyright © 2011-2022 走看看