效果如下:
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
分享到:
相关推荐
QQ 通讯录以其直观的用户界面和强大的功能深受用户喜爱,因此,开发一个类似的 demo 可以帮助开发者掌握如何在 iPhone 上实现类似的体验。 【描述】:“iPhone 类似 QQ 通讯录 Demo”旨在提供一个基础框架,用于...
【标题】"Android代码-仿qq通讯录联系人.rar"是一个关于Android开发的项目,其目标是实现一个类似于QQ通讯录的应用。这个项目的核心在于如何高效地管理和展示大量的联系人数据,同时提供类似QQ的用户体验。 【描述...
在Android平台上,获取联系人数据是一项常见的功能,尤其在开发类似QQ通讯录的应用时,我们需要高效、安全地访问用户手机中的联系人信息。本篇将详细介绍如何在Android中实现这一功能,以及如何创建一个仿QQ通讯录的...
【标题】"WPF做的类似QQ的通讯录"揭示了一个基于Windows Presentation Foundation(WPF)技术构建的应用程序项目,旨在实现一个与QQ类似的通讯录功能。WPF是.NET Framework的一部分,用于构建桌面应用程序,它提供了...
作为腾讯QQ应用中的一项功能,它允许用户通过绑定手机号码,实现与手机通讯录的同步,从而在应用内直接查看、搜索和管理联系人信息。虽然这一功能为用户提供了极大的便利,但随着时间的推移,许多用户反映推荐联系人...
QQ通讯录Android版是一款专为Android操作系统设计的手机通讯管理应用,由腾讯公司开发,旨在为用户带来便捷、高效的联系人管理和沟通体验。这款应用集成了QQ账号体系,让用户能够轻松地将QQ好友与手机联系人相结合,...
在Android系统中,拦截短信是一项常见的功能,尤其对于开发者来说,可能需要在特定的应用程序(如QQ通讯录)之前获取并处理短信。本教程将详细解释如何实现这一目标,包括理解Android的消息处理机制、注册短信广播...
在Android开发中,实现“仿QQ通讯录悬浮效果”是一个涉及到UI交互与动画技术的实践课题。这个项目主要是为了模拟QQ通讯录中的悬浮界面,它通常会在用户滚动页面时,部分重要元素(如搜索框)会保持在屏幕的固定位置...
为了在QQ通讯录之前拦截短信,我们需要创建一个自定义的BroadcastReceiver,并在AndroidManifest.xml文件中注册它。这个BroadcastReceiver需要监听SMS_RECEIVED行动,这是系统发出短信到达的通知。在...
安卓通讯录主要实现了对联系人信息(姓名和电话)的增加、删除、修改和查询功能,系统通过`SQLite`数据库来存储数据。系统有欢迎、注册和登录页面,先注册后使用。主页面包含`对联系人信息增删改查`这四种功能:在...
【标题】"仿QQ通讯录功能及界面"涵盖了在Android平台上开发类似QQ通讯录的应用程序所需的技术和设计思路。在Android应用开发中,构建这样一个功能通常涉及到以下几个关键知识点: 1. **用户界面(UI)设计**:QQ...
这个项目旨在帮助开发者深入理解如何在Android环境中实现类似QQ的用户界面和交互逻辑,以及如何高效地管理和展示大量联系人数据。 【描述】"源码参考,欢迎下载" 表明这个资源是开放的,鼓励开发者下载并研究其中的...
【仿QQ通讯录】是一个应用程序开发项目,旨在创建一个类似QQ通讯录的联系人管理工具。这个项目的核心目标是提供一种用户体验良好、功能丰富的通信工具,让用户能够方便地存储、管理和交流与联系人的信息。在深入探讨...
【简易版 Android QQ通讯录 源码】项目是一个针对初学者和开发者设计的实践案例,旨在帮助他们理解和实现一个类似QQ通讯录的应用程序。这个项目的核心目标是展示如何在Android平台上创建一个功能完备的通讯录应用,...
Java编程实现的简单QQ通讯录是一个基础的联系人管理程序,它主要利用了ArrayList集合类来存储和操作数据。这个程序不具备图形用户界面,而是通过命令行或控制台进行交互,方便开发者在Eclipse这样的集成开发环境...
一、效果:我们看到很多软件的通讯录在右侧都有一个字母索引功能,像微信,小米通讯录,QQ,还有美团选择地区等等。这里我截了一张美团选择城市的图片来看看; 我们今天就来实现图片中右侧模块的索引功能,包括触摸...
在Android开发中,创建一个类似QQ通讯录的高效滑动列表是常见的需求,这涉及到UI设计、数据处理和用户交互优化等多个方面。本项目“仿QQ通讯录列表样式,快速滑动”旨在实现一个功能完备且用户体验良好的通讯录展示...
该压缩包文件“安卓通讯录联系人打电话归属地相关-仿qq通讯录联系人.rar”主要涉及的是在Android平台上开发一款应用,该应用模仿了QQ通讯录的功能,特别是在联系人显示和拨打电话时,能够显示归属地信息。...
【描述】在“仿QQ列表通讯录”中,开发者主要关注的是如何利用ExpandableListView来模拟QQ应用的联系人分组。ExpandableListView允许用户将数据集分为多个父项,每个父项下可以包含多个子项,这样的设计使得用户可以...
qq邮箱批量导入通讯录模板,qq邮箱导出来的一般是乱码,这个是修正好的,方法是通过excel 自由数据导入,最后再导出,如果嫌麻烦的可以直接下载下来用。