实训第四周(1)

本周开始写第二个自定义的Fragment, ContractFragment。对应界面中的“通讯录”。里面实现的功能有添加朋友,验证提醒,好友列表显示。

1. 设置加载的布局ID以及“通讯录”布局文件

 @Override
    public int setLayoutID() {
        return R.layout.fragment_contract;
    }

fragment_contract.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:background="@color/interval_color">

    <RelativeLayout
        android:background="@color/white_color"
        android:id="@+id/layout_add_friend"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp">

        <ImageView
            android:id="@+id/iv_add_friend"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:padding="5dp"
            android:scaleType="fitXY"
            android:src="@mipmap/add_friend"/>

        <TextView
            android:layout_toRightOf="@+id/iv_add_friend"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/add_friend"
            android:textSize="16sp"
            android:textColor="@color/app_black_color"
            android:layout_marginLeft="5dp"
            android:gravity="center"/>
        <View
            android:layout_alignParentBottom="true"
            android:layout_width="match_parent"
            android:layout_height="0.8dp"
            android:background="@color/interval_color"/>
    </RelativeLayout>
    <RelativeLayout
        android:background="@color/white_color"
        android:id="@+id/layout_msg_notify"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp">

        <ImageView
            android:id="@+id/iv_msg_notify"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:padding="5dp"
            android:scaleType="fitXY"
            android:src="@mipmap/msg_notify"/>

        <TextView
            android:id="@+id/tv_alarm"
            android:layout_toRightOf="@+id/iv_msg_notify"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/msg_notify"
            android:textSize="16sp"
            android:textColor="@color/app_black_color"
            android:layout_marginLeft="5dp"
            android:gravity="center"/>
        
        <View
            android:layout_alignParentBottom="true"
            android:layout_width="match_parent"
            android:layout_height="0.8dp"
            android:background="@color/interval_color"/>
    </RelativeLayout>


    <android.support.v7.widget.RecyclerView
        android:layout_marginTop="10dp"
        android:background="@color/white_color"
        android:id="@+id/rcv_friend"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"/>

</LinearLayout>


2.初始化

验证提醒下方的空白处即好友列表,列表的每一项显示该好友头像和昵称(bindView)

点击某一项(setItemClickListener)会跳转进入该好友信息(FriendInfoActivity)

设置好友列表更新监听,加载好友列表(loadFriendList)

@Override
    public void initView(View rootView) {
        ButterKnife.bind(this, rootView);
        mFriendList = new ArrayList<>();
        mViewAdapter = new RecycleViewAdapter<NimUserInfo>(getContext(), mFriendList) {
            @Override
            public int setItemLayoutId(int position) {
                return R.layout.item_friend;
            }

            @Override
            public void bindView(RViewHolder holder, int position) {
                NimUserInfo item = mFriendList.get(position);
                holder.setImageByUrl(getContext(), R.id.iv_head_picture,
                        item.getAvatar(), R.mipmap.bg_img_defalut);
                holder.setText(R.id.tv_friend_nick, item.getName());
            }
        };
        mViewAdapter.setItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(RViewHolder holder, int position) {
                Intent intent = new Intent(getContext(), FriendInfoActivity.class);//创建intent对象,参数分别为上下文,要跳转的Activity类(朋友详细资料)
                //将要传递的值附加到Intent对象
                intent.putExtra("NimUserInfo", mFriendList.get(position)); //(键, 值)
                intent.putExtra("FLAG", FriendInfoActivity.FLAG_SHOW_FRIEND);
                //启动该Intent对象,实现跳转
                startActivity(intent);
            }
        });

        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        mRecyclerView.setAdapter(mViewAdapter);

        NimFriendHandler.getInstance().setUpdateListener(new OnFriendUpdateListener() {
            @Override
            public void friendUpdate() {
                loadFriendList();
            }
        });

        loadFriendList();

    }

3. FriendInfoActivity.java     好友信息(当点击好友列表一项时,进入对应的好友信息)(initView中用到)

(1)会显示头像,app名字(聊天工具),账号

    可选择添加到通讯录,发送信息

(2)根据预先设置的FLAG选择所要显示的下方TextView

    a. flag == FLAG_ADD_FRIEND

        只显示“添加到通讯录”

    b. flag == FLAG_SHOW_FRIEND

        显示“发送信息”

    c. flag == FLAG_PURE_SHOW_FRIEND

        都不显示

   initView中选择b

(3) 若点击了“添加到通讯录”,跳转到RequestFriendActivity

(4) 若点击了“发送信息”,跳转到P2PChatActivity

(5)可选择回退

package com.ezreal.ezchat.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.ezreal.ezchat.R;
import com.joooonho.SelectableRoundedImageView;
import com.netease.nimlib.sdk.uinfo.constant.GenderEnum;
import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
import com.ezreal.ezchat.commonlibrary.utils.ImageUtils;

import java.util.Map;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

/**
 * Created by 张静
 */

public class FriendInfoActivity extends BaseActivity {

    public static final int FLAG_ADD_FRIEND = 10001;
    public static final int FLAG_SHOW_FRIEND = 10002;
    public static final int FLAG_PURE_SHOW_FRIEND=10003;

    @BindView(R.id.iv_head_picture)
    SelectableRoundedImageView mHeadImg;
    @BindView(R.id.iv_person_sex)
    ImageView mIvPersonSex;
    @BindView(R.id.tv_remark)
    TextView mTvRemark;
    @BindView(R.id.tv_account)
    TextView mTvAccount;
    @BindView(R.id.tv_nike)
    TextView mTvNike;
    @BindView(R.id.tv_add_to_contract)
    TextView mTvAdd2Contract;
    @BindView(R.id.tv_start_chat)
    TextView mTvStartChat;
    @BindView(R.id.tv_video_chat)
    TextView mTvVideoChat;

    private NimUserInfo mNimUserInfo;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStatusBarColor(R.color.app_blue_color);
        setContentView(R.layout.activity_friend_info);
        setTitleBar("详细资料",true,true);
        ButterKnife.bind(this);
        bindViewByIntent();
    }


    private void bindViewByIntent(){
        Intent intent = getIntent();
        int flag = intent.getIntExtra("FLAG", FLAG_ADD_FRIEND);
        if ( flag == FLAG_ADD_FRIEND){
            mTvAdd2Contract.setVisibility(View.VISIBLE);
            mTvStartChat.setVisibility(View.GONE);
            mTvVideoChat.setVisibility(View.GONE);
        }else if (flag == FLAG_SHOW_FRIEND){
            mTvAdd2Contract.setVisibility(View.GONE);
            mTvStartChat.setVisibility(View.VISIBLE);
            mTvVideoChat.setVisibility(View.VISIBLE);
        }else if(flag==FLAG_PURE_SHOW_FRIEND){
            mTvAdd2Contract.setVisibility(View.GONE);
            mTvStartChat.setVisibility(View.GONE);
            mTvVideoChat.setVisibility(View.GONE);
        }

        mNimUserInfo = (NimUserInfo) intent.getSerializableExtra("NimUserInfo");
        if (mNimUserInfo != null){
            ImageUtils.setImageByUrl(this,mHeadImg,mNimUserInfo.getAvatar(),R.mipmap.app_logo_main);
            if (mNimUserInfo.getGenderEnum() == GenderEnum.FEMALE){
                mIvPersonSex.setImageResource(R.mipmap.ic_woman);
            }else if (mNimUserInfo.getGenderEnum() == GenderEnum.MALE){
                mIvPersonSex.setImageResource(R.mipmap.ic_man);
            }
            mTvAccount.setText(mNimUserInfo.getAccount());
            mTvNike.setText(mNimUserInfo.getName());
            String remark = mNimUserInfo.getName();
            Map<String, Object> extensionMap = mNimUserInfo.getExtensionMap();
            if (extensionMap != null && extensionMap.containsKey("remark")){
                remark = extensionMap.get("remark").toString();
            }
            mTvRemark.setText(remark);
        }

    }

    /**
     * 添加好友
     */
    @OnClick(R.id.tv_add_to_contract)
    public void add2Contract(){
        Intent intent = new Intent(this,RequestFriendActivity.class);
        intent.putExtra("account",mNimUserInfo.getAccount());
        startActivity(intent);
    }

    /**
     * 跳转至聊天界面
     */
    @OnClick(R.id.tv_start_chat)
    public void startChat(){
        Intent intent = new Intent(this,P2PChatActivity.class);
        intent.putExtra("NimUserInfo",mNimUserInfo);
        startActivity(intent);
    }

    @OnClick(R.id.iv_back_btn)
    public void backClick(){
        this.finish();
    }

activity_friend_info.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:fitsSystemWindows="true">

    <include layout="@layout/title_layout"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@color/interval_color">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_marginTop="10dp"
            android:background="@color/white_color">

            <com.joooonho.SelectableRoundedImageView
                android:id="@+id/iv_head_picture"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:layout_margin="10dp"
                app:sriv_oval="true"
                android:scaleType="fitXY"
                android:src="@mipmap/app_logo_main"/>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_toRightOf="@id/iv_head_picture"
                android:gravity="center_vertical"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/tv_remark"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/app_name"
                    android:textSize="16sp"
                    android:textColor="@color/app_black_color"/>

                <ImageView
                    android:id="@+id/iv_person_sex"
                    android:layout_toRightOf="@+id/tv_remark"
                    android:layout_width="15dp"
                    android:layout_height="15dp"
                    android:layout_marginLeft="10dp"
                    android:src="@mipmap/ic_man"/>

                <TextView
                    android:id="@+id/tv_tip"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/tv_remark"
                    android:layout_marginTop="10dp"
                    android:text="@string/account_tip"
                    android:textSize="16sp"
                    android:textColor="@color/app_black_color"/>

                <TextView
                    android:id="@+id/tv_account"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/tv_remark"
                    android:layout_marginTop="10dp"
                    android:layout_toRightOf="@+id/tv_tip"
                    android:text="Ezreal-520"
                    android:textSize="16sp"
                    android:textColor="@color/app_black_color"/>

                <TextView
                    android:id="@+id/tv_tip_nike"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/tv_tip"
                    android:layout_marginTop="10dp"
                    android:text="@string/nike_tip"
                    android:textSize="16sp"
                    android:textColor="@color/app_black_color"/>

                <TextView
                    android:id="@+id/tv_nike"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/tv_account"
                    android:layout_marginTop="10dp"
                    android:textSize="16sp"
                    android:layout_toRightOf="@+id/tv_tip_nike"
                    android:text="Fate"
                    android:textColor="@color/app_black_color"/>
            </RelativeLayout>

        </RelativeLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="10dp"/>

        <TextView
            android:id="@+id/tv_set_remark"
            android:gravity="center"
            android:textSize="18sp"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/white_color"
            android:textColor="@color/app_black_color"
            android:text="@string/set_remark_info"
            android:visibility="visible"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="40dp"/>

        <TextView
            android:id="@+id/tv_start_chat"
            android:gravity="center"
            android:textSize="18sp"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/app_blue_color"
            android:textColor="@color/white_color"
            android:text="@string/send_message"
            android:visibility="visible"/>

        <TextView
            android:id="@+id/tv_video_chat"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:textSize="18sp"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/white_color"
            android:textColor="@color/app_blue_color"
            android:text="@string/video_chat"
            android:visibility="gone"/>

        <TextView
            android:id="@+id/tv_add_to_contract"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:textSize="18sp"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/app_blue_color"
            android:textColor="@color/white_color"
            android:text="@string/add_to_contract"/>

    </LinearLayout>


</LinearLayout>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值