第一阶段冲刺---聊天记录查询

今日完成

  • 聊天记录的查询

聊天页面

主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();
        }
    }
}

界面

posted @ 2020-04-21 22:06  Nevesettle  阅读(231)  评论(0编辑  收藏  举报