首页 > 代码库 > 硅谷社交14--选择联系人页面

硅谷社交14--选择联系人页面

技术分享

1)页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
>
    <RelativeLayout
        android:background="@android:color/holo_blue_light"
        android:layout_width="match_parent"
        android:layout_height="60dp">

        <TextView
            android:text="选择联系人"
            android:textSize="25sp"
            android:textColor="@android:color/white"
            android:layout_centerInParent="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/tv_pick_save"
            android:text="保存"
            android:textSize="25sp"
            android:textColor="@android:color/white"
            android:layout_alignParentRight="true"
            android:gravity="center"
            android:layout_marginRight="5dp"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />
    </RelativeLayout>

    <ListView
        android:id="@+id/lv_pick"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </ListView>

</LinearLayout>

2)获取好友列表

// 获取所有联系人的数据
List<UserInfo> contacts = Model.getInstace().getDbManager().getContactTableDao().getContacts();
mPicks = new ArrayList<>();
// 校验
if(contacts != null && contacts.size() >= 0) {
	// 将联系人信息转换为选择联系人bean信息
	PickContactInfo pickContactInfo = null;
	for (UserInfo contact: contacts){
		pickContactInfo = new PickContactInfo(contact, false);
		mPicks.add(pickContactInfo);
	}
}

3)初始化listview

// 创建适配器
mPickContactsAdapter = new PickContactsAdapter(PickContactsActivity.this, mPicks, mExistingMembers);
// 添加适配器
lv_pick_contacts.setAdapter(mPickContactsAdapter);

4)Listview适配器

public class PickContactsAdapter extends BaseAdapter {
    private Context mContext;
    private List<PickContactInfo> mPicks = new ArrayList<>();
    private List<String> mExistingMembers  = new ArrayList<>();


    public PickContactsAdapter(Context context , List<PickContactInfo> picks,List<String> existingMembers) {
        mContext = context;

        if(picks != null && picks.size() >= 0) {
            mPicks.clear();
            mPicks.addAll(picks);
        }

        // 接受群中已经存在的群成员的环信id
        if(existingMembers != null && existingMembers.size() >=0 ) {
            mExistingMembers.clear();
            mExistingMembers.addAll(existingMembers);
        }
    }

    // 获取选中的联系人
    public List<String> getAddMembers(){
        // 准备一个要返回的数据集合
        List<String> names = new ArrayList<>();

        // 遍历集合 选择出选中状态的联系人
        for (PickContactInfo pick: mPicks){

            if(pick.isChecked()) {
                names.add(pick.getUser().getName());
            }
        }

        return names;
    }

    @Override
    public int getCount() {
        return mPicks == null? 0:mPicks.size();
    }

    @Override
    public Object getItem(int position) {
        return mPicks.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 创建或获取viewholder
        ViewHolder holder  = null;
        if(convertView == null) {
            holder = new ViewHolder();
            convertView = View.inflate(mContext, R.layout.item_pick_contacts, null);
            holder.tv_name = (TextView) convertView.findViewById(R.id.tv_item_pick_contacts_name);
            holder.cb_checked = (CheckBox) convertView.findViewById(R.id.cb_item_pick_contacts);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        // 获取当前item数据
        PickContactInfo pickContactInfo = mPicks.get(position);

        // 显示数据
        holder.tv_name.setText(pickContactInfo.getUser().getName());
        holder.cb_checked.setChecked(pickContactInfo.isChecked());

        if(mExistingMembers.contains(pickContactInfo.getUser().getHxId())) {
            holder.cb_checked.setChecked(true);
            pickContactInfo.setIsChecked(true);
        }

        // 返回view

        return convertView;
    }

    static class ViewHolder{
        TextView tv_name;
        CheckBox cb_checked;
    }
}


5)Listview条目的点击事件

// listView团队item点击事件处理
lv_pick_contacts.setOnItemClickListener(new AdapterView.OnItemClickListener() {
	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		//  获取当前item的checkbox对象
		CheckBox cb_item_pick_contacts = (CheckBox) view.findViewById(R.id.cb_item_pick_contacts);
		// 设置状态
		cb_item_pick_contacts.setChecked(!cb_item_pick_contacts.isChecked());
//                cb_item_pick_contacts.toggle();
		// 更新数据
		PickContactInfo pickContactInfo = mPicks.get(position);
		pickContactInfo.setIsChecked(cb_item_pick_contacts.isChecked());
		// 刷新列表数据
		mPickContactsAdapter.notifyDataSetChanged();
	}
});


6)保存按钮点击事件

// 保存按钮的点击监听处理
tv_pick_contacts_save.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		// 获取被选择的联系人
		List<String> addMembers = mPickContactsAdapter.getAddMembers();
		// 设置数据准备返回创建群页面
		Intent intent = new Intent();
		intent.putExtra("members", addMembers.toArray(new String[0]));
		setResult(RESULT_OK, intent);
		// 结束当前页面
		finish();
	}
});

  

 

硅谷社交14--选择联系人页面