`

实现类似QQ通讯录中新建短信时选择联系人的效果

 
阅读更多

效果如下:

Activity的上面是GridView,下面是ListView

 

项目结构:

 

 

实现起来很简单。注释代码中都有,直接上代码:

 

ChoosePanelAdapter.java:

import java.util.List;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;

/**
 * This is the adapter of GridView. 
 * Make every Item of GridView setOnClickListener in the method of getView(),
 * when Item clicked,get the background drawable of this Item.
 * If it's normal drawable,then go through all the items of GridView and set normal drawable.
 * If it's selected drawable,delete the data of arrayList by Item id,and call notifyDataSetChanged()
 * 
 * 这个是GridView的数据适配器。
 * 在getView()中让每一个Item都设置了OnClickListener,在点击事件触发的时候,判断下当前Item的背景图片
 * 如果是normal,则遍历所有的Item,将背景设置为normal,将当前被点击的Item的背景图片设置成selected,
 * 如果是selected,就根据索引删除当前的Item的数据源,并调用notifyDataSetChanged(),刷新。
 * 
 * @author MichaelYe
 * @since 2012-8-28
 * */
public class ChoosePanelAdapter extends BaseAdapter
{
	private Context context;
	private List<String> arrayList;
	private Drawable iconDefalut;
	private Drawable iconSelected;
	public ChoosePanelAdapter(Context context, List<String> arrayList)
	{
		this.context = context;
		this.arrayList = arrayList;
		iconDefalut = context.getResources().getDrawable(R.drawable.icon_default);
		iconSelected = context.getResources().getDrawable(R.drawable.icon_selected);
	}

	@Override
	public int getCount() {
		return arrayList.size();
	}

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

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

	@Override
	public View getView(final int position, View convertView, ViewGroup parent)
	{
		Button button;
        if (convertView == null)
        {
        	button = new Button(context);
	    }
	    else
	    {
	    	button = (Button) convertView;
	    }
        button.setText(arrayList.get(position));
        button.setBackgroundDrawable(iconDefalut);
        button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(v.getBackground() == iconSelected)//判断当前的背景是哪个
				{
					arrayList.remove(position);
					ChoosePanelAdapter.this.notifyDataSetChanged();
				}
				else
				{
					ChoosePanelAdapter.this.setButtonDefaultState(v);
					v.setBackgroundDrawable(iconSelected);
				}
				v.invalidate();
			}
		});
	    return button;
	}
	
	/**
	 * set all the buttons state normal
	 * 
	 * 设置按钮背景图片为默认状态
	 * 
	 * */
	private void setButtonDefaultState(View v)
	{
		GridView gvParent = (GridView)v.getParent();
		int childCount = gvParent.getChildCount();
		for(int i = 0; i < childCount; i++)
		{
			gvParent.getChildAt(i).setBackgroundDrawable(iconDefalut);
		}
		gvParent.invalidate();
	}
}

 

MainActivity.java

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ListView;

/**
 * use GridView make the effect like QQ Address Book when choose a contact 
 * 
 * 类似QQ通讯录中的短信模块中选择联系人的效果,使用的是GridView
 * 
 * @author MichaelYe
 * @since 2012-8-28
 * */
public class MainActivity extends Activity 
{

	private GridView gvPanel;
	private ListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        gvPanel = (GridView)findViewById(R.id.gv_panel);
        listView = (ListView)findViewById(R.id.listview);
        
        final List<String> data = this.getData();
        final List<String> panelArrayList = new ArrayList<String>();
        final ChoosePanelAdapter adapter = new ChoosePanelAdapter(MainActivity.this, panelArrayList);
        
        listView.setAdapter(new ArrayAdapter<String>(MainActivity.this,
        		android.R.layout.simple_expandable_list_item_1, data));
        
        listView.setOnItemClickListener(new OnItemClickListener() 
        {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) 
			{
				panelArrayList.add(data.get(position));
				adapter.notifyDataSetChanged();
			}
		});
        
        gvPanel.setAdapter(adapter);
    }

    /**
     * DataSource
     * 
     * 
     * */
    private List<String> getData()
    {
    	List<String> list = new ArrayList<String>();
    	list.add("张三");
    	list.add("李四");
    	list.add("王五");
    	list.add("赵六");
    	list.add("乔丹");
    	list.add("爱斯基摩");
    	list.add("维也纳");
    	list.add("周星星");
    	return list;
    }
}

 

 布局文件activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <GridView
        android:id="@+id/gv_panel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numColumns="auto_fit"
        android:columnWidth="60dp"
        android:layout_alignParentTop="true"
        android:verticalSpacing="5dp"
	    android:horizontalSpacing="5dp"
	    android:stretchMode="columnWidth"
         />

    <ListView 
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/gv_panel"
        />
    
</RelativeLayout>
 

项目下载地址:

https://github.com/michaelye/DemoChooseValues

 

  • 大小: 256 KB
  • 大小: 43.5 KB
分享到:
评论

相关推荐

    iphone 类似 QQ 通讯录 demo

    QQ 通讯录以其直观的用户界面和强大的功能深受用户喜爱,因此,开发一个类似的 demo 可以帮助开发者掌握如何在 iPhone 上实现类似的体验。 【描述】:“iPhone 类似 QQ 通讯录 Demo”旨在提供一个基础框架,用于...

    Android代码-仿qq通讯录联系人.rar

    【标题】"Android代码-仿qq通讯录联系人.rar"是一个关于Android开发的项目,其目标是实现一个类似于QQ通讯录的应用。这个项目的核心在于如何高效地管理和展示大量的联系人数据,同时提供类似QQ的用户体验。 【描述...

    Android 获取联系人 仿QQ通讯录

    在Android平台上,获取联系人数据是一项常见的功能,尤其在开发类似QQ通讯录的应用时,我们需要高效、安全地访问用户手机中的联系人信息。本篇将详细介绍如何在Android中实现这一功能,以及如何创建一个仿QQ通讯录的...

    WPF做的类似QQ的通讯录

    【标题】"WPF做的类似QQ的通讯录"揭示了一个基于Windows Presentation Foundation(WPF)技术构建的应用程序项目,旨在实现一个与QQ类似的通讯录功能。WPF是.NET Framework的一部分,用于构建桌面应用程序,它提供了...

    QQ手机通讯录怎么设置不显示推荐联系人.docx

    作为腾讯QQ应用中的一项功能,它允许用户通过绑定手机号码,实现与手机通讯录的同步,从而在应用内直接查看、搜索和管理联系人信息。虽然这一功能为用户提供了极大的便利,但随着时间的推移,许多用户反映推荐联系人...

    QQ通讯录Android版

    QQ通讯录Android版是一款专为Android操作系统设计的手机通讯管理应用,由腾讯公司开发,旨在为用户带来便捷、高效的联系人管理和沟通体验。这款应用集成了QQ账号体系,让用户能够轻松地将QQ好友与手机联系人相结合,...

    在QQ通讯录之前拦截短信

    在Android系统中,拦截短信是一项常见的功能,尤其对于开发者来说,可能需要在特定的应用程序(如QQ通讯录)之前获取并处理短信。本教程将详细解释如何实现这一目标,包括理解Android的消息处理机制、注册短信广播...

    仿QQ通讯录悬浮效果

    在Android开发中,实现“仿QQ通讯录悬浮效果”是一个涉及到UI交互与动画技术的实践课题。这个项目主要是为了模拟QQ通讯录中的悬浮界面,它通常会在用户滚动页面时,部分重要元素(如搜索框)会保持在屏幕的固定位置...

    在QQ通讯录之前拦截短信(android)

    为了在QQ通讯录之前拦截短信,我们需要创建一个自定义的BroadcastReceiver,并在AndroidManifest.xml文件中注册它。这个BroadcastReceiver需要监听SMS_RECEIVED行动,这是系统发出短信到达的通知。在...

    Android Studio实现通讯录

    安卓通讯录主要实现了对联系人信息(姓名和电话)的增加、删除、修改和查询功能,系统通过`SQLite`数据库来存储数据。系统有欢迎、注册和登录页面,先注册后使用。主页面包含`对联系人信息增删改查`这四种功能:在...

    仿QQ通讯录功能及界面

    【标题】"仿QQ通讯录功能及界面"涵盖了在Android平台上开发类似QQ通讯录的应用程序所需的技术和设计思路。在Android应用开发中,构建这样一个功能通常涉及到以下几个关键知识点: 1. **用户界面(UI)设计**:QQ...

    Android高级应用源码-仿qq通讯录联系人.zip

    这个项目旨在帮助开发者深入理解如何在Android环境中实现类似QQ的用户界面和交互逻辑,以及如何高效地管理和展示大量联系人数据。 【描述】"源码参考,欢迎下载" 表明这个资源是开放的,鼓励开发者下载并研究其中的...

    仿QQ通讯录

    【仿QQ通讯录】是一个应用程序开发项目,旨在创建一个类似QQ通讯录的联系人管理工具。这个项目的核心目标是提供一种用户体验良好、功能丰富的通信工具,让用户能够方便地存储、管理和交流与联系人的信息。在深入探讨...

    简易版 android QQ通讯录 源码

    【简易版 Android QQ通讯录 源码】项目是一个针对初学者和开发者设计的实践案例,旨在帮助他们理解和实现一个类似QQ通讯录的应用程序。这个项目的核心目标是展示如何在Android平台上创建一个功能完备的通讯录应用,...

    java 简单QQ通讯录具有增删改查功能

    Java编程实现的简单QQ通讯录是一个基础的联系人管理程序,它主要利用了ArrayList集合类来存储和操作数据。这个程序不具备图形用户界面,而是通过命令行或控制台进行交互,方便开发者在Eclipse这样的集成开发环境...

    Android自定义View实现通讯录字母索引(仿微信通讯录)

    一、效果:我们看到很多软件的通讯录在右侧都有一个字母索引功能,像微信,小米通讯录,QQ,还有美团选择地区等等。这里我截了一张美团选择城市的图片来看看; 我们今天就来实现图片中右侧模块的索引功能,包括触摸...

    仿QQ通讯录列表样式,快速滑动

    在Android开发中,创建一个类似QQ通讯录的高效滑动列表是常见的需求,这涉及到UI设计、数据处理和用户交互优化等多个方面。本项目“仿QQ通讯录列表样式,快速滑动”旨在实现一个功能完备且用户体验良好的通讯录展示...

    安卓通讯录联系人打电话归属地相关-仿qq通讯录联系人.rar

    该压缩包文件“安卓通讯录联系人打电话归属地相关-仿qq通讯录联系人.rar”主要涉及的是在Android平台上开发一款应用,该应用模仿了QQ通讯录的功能,特别是在联系人显示和拨打电话时,能够显示归属地信息。...

    仿QQ列表通讯录

    【描述】在“仿QQ列表通讯录”中,开发者主要关注的是如何利用ExpandableListView来模拟QQ应用的联系人分组。ExpandableListView允许用户将数据集分为多个父项,每个父项下可以包含多个子项,这样的设计使得用户可以...

    QQ通讯录模板.csv

    qq邮箱批量导入通讯录模板,qq邮箱导出来的一般是乱码,这个是修正好的,方法是通过excel 自由数据导入,最后再导出,如果嫌麻烦的可以直接下载下来用。

Global site tag (gtag.js) - Google Analytics