本周开始写第二个自定义的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>