700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 用ExpandableListView实现好友分组

用ExpandableListView实现好友分组

时间:2019-07-24 04:13:19

相关推荐

用ExpandableListView实现好友分组

上篇关于好友分组,采用的是listview,这篇随便写了个demo,用ExpandableListView实现

说到ExpandableListView,其实我们都可以去实现一个相关的adapter,重写里面的getView()方法,只是这次要重写的重要方法是getChildView()和getGroupView()

在下面的activity代码里定义了一个组的集合mGroupArray,存放的是是一个pojo-->GroupInfo

在GroupInfo里定义了组的名字和好友信息集合,一个好友有相应的图片和说明,采用一个Map集合来装取.

还有个关于组前面的图片问题,这里我将他替换掉自己的.(调用ExpandableListView的setGroupIndicator()方法)

不说了,上代码:

主界面activity

package org.guoshi.ui; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.guoshi.pojo.GroupInfo; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.AbsListView; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.ImageView; import android.widget.TextView; public class Main extends Activity { private ExpandableListView mElv; private List<GroupInfo> mGroupArray; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.friend_info_view); mElv = (ExpandableListView) findViewById(R.id.expandableList); mGroupArray = new ArrayList<GroupInfo>(); Map<String, Object> mChildArray = new HashMap<String, Object>(); mChildArray.put("title", "jayqean"); mChildArray.put("imgsrc", R.drawable.icon); GroupInfo groupInfo = new GroupInfo("常用联系人"); List<Map<String, Object>> childList = new ArrayList<Map<String, Object>>(); childList.add(mChildArray); groupInfo.setChildList(childList); mGroupArray.add(groupInfo); Map<String, Object> mChildArray2 = new HashMap<String, Object>(); mChildArray2.put("title", "xiaobei"); mChildArray2.put("imgsrc", R.drawable.icon); Map<String, Object> mChildArray3 = new HashMap<String, Object>(); mChildArray3.put("title", "tingting"); mChildArray3.put("imgsrc", R.drawable.icon); GroupInfo groupInfo2 = new GroupInfo("离线好友"); List<Map<String, Object>> childList2 = new ArrayList<Map<String, Object>>(); childList2.add(mChildArray2); childList2.add(mChildArray3); groupInfo2.setChildList(childList2); mGroupArray.add(groupInfo2); mElv.setGroupIndicator(this.getResources().getDrawable( R.layout.expandablelistviewselector));// 换图片 mElv.setAdapter(new ExpandableAdapter(this, Main.this)); // 点击修改自己的状态 TextView mStatus = (TextView) findViewById(R.id.setStatus); mStatus.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = getIntent(); intent.setClass(Main.this, EditStatusActivity.class); startActivity(intent); } }); } private class ExpandableAdapter extends BaseExpandableListAdapter { Activity activity; LayoutInflater layoutInflater; public ExpandableAdapter(Activity a, Context context) { activity = a; layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public Object getChild(int groupPosition, int childPosition) { return mGroupArray.get(groupPosition).getChildList() .get(childPosition); } public long getChildId(int groupPosition, int childPosition) { return childPosition; } public int getChildrenCount(int groupPosition) { return mGroupArray.get(groupPosition).getChildList().size(); } public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { Map<String, Object> childMap = mGroupArray.get(groupPosition) .getChildList().get(childPosition); convertView = (View) layoutInflater.inflate( R.layout.chats_view_item, null); final ImageView image = (ImageView) convertView .findViewById(R.id.chats_view_item_image); if (image != null) { image.setImageResource(R.drawable.icon); } final TextView tv = (TextView) convertView .findViewById(R.id.chats_view_name); if (tv != null) { tv.setText(childMap.get("title").toString()); } convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = getIntent(); intent.setClass(activity, ChatActivity.class); startActivity(intent); } }); return convertView; } public Object getGroup(int groupPosition) { return mGroupArray.get(groupPosition); } public int getGroupCount() { return mGroupArray.size(); } public long getGroupId(int groupPosition) { return groupPosition; } public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { String string = mGroupArray.get(groupPosition).getName(); return getGenericView(string); } public TextView getGenericView(String string) { AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 32); TextView text = new TextView(activity); text.setLayoutParams(layoutParams); text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); text.setPadding(36, 0, 0, 0); text.setText(string); return text; } public boolean hasStableIds() { return true; } public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } }

GroupInfo.java

package org.guoshi.pojo; import java.util.ArrayList; import java.util.List; import java.util.Map; public class GroupInfo { private String name;// 组名 private List<Map<String, Object>> childList;// 组下面的好友集合 public GroupInfo(){ childList = new ArrayList<Map<String,Object>>(); } public GroupInfo(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Map<String, Object>> getChildList() { return childList; } public void setChildList(List<Map<String, Object>> childList) { this.childList = childList; } }

关于组前面的图标替换需要的xml文件

expandablelistviewselector.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="/apk/res/android"> <item android:state_expanded="true" android:drawable="@drawable/expand" /> <item android:drawable="@drawable/normal" /> </selector>

布局需要的xml文件如下:

friend_info_view.xml

<?xml version="1.0" encoding="UTF-8"?> <!-- 好友信息列表.xml --> <LinearLayout xmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/white"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/selfImage" android:adjustViewBounds="true" android:layout_width="@dimen/self_image_width" android:layout_height="@dimen/self_image_height" android:layout_marginLeft="5.0dip" android:layout_marginBottom="10.0dip" android:layout_marginTop="3.0dip" android:src="@drawable/default_image" /> <ImageView android:id="@+id/currentStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/status_available" android:layout_marginLeft="8.0dip" android:layout_marginTop="20.0dip" android:layout_toRightOf="@id/selfImage" /> <TextView android:id="@+id/setStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20.0dip" android:layout_marginLeft="8.0dip" android:text="Tap here to set your status" android:layout_toRightOf="@+id/currentStatus" /> </RelativeLayout> <EditText android:id="@+id/searchFriend" android:adjustViewBounds="true" android:layout_height="50dip" android:layout_width="fill_parent" android:text="Search..." /> <!-- 好友组 --> <ExpandableListView android:id="@+id/expandableList" android:layout_height="wrap_content" android:layout_width="fill_parent" /> </LinearLayout>

chats_view_item.xml

<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/white"> <RelativeLayout android:id="@+id/chats_view_item" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/chats_view_item_image" android:layout_width="@dimen/friend_image_width" android:layout_height="@dimen/friend_image_height" android:paddingLeft="5.0dip" android:paddingTop="2.0dip" android:src="@drawable/default_image" /> <TextView android:id="@+id/chats_view_name" android:textSize="14.0sp" android:paddingLeft="10.0dip" android:textStyle="bold" android:ellipsize="marquee" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="username" android:singleLine="true" android:paddingTop="2.0dip" android:layout_toRightOf="@+id/chats_view_item_image" /> <ImageView android:id="@+id/friend_status_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10.0dip" android:paddingTop="1.0dip" android:layout_below="@+id/chats_view_name" android:layout_toRightOf="@+id/chats_view_item_image" android:src="@drawable/jabber_available" /> <TextView android:id="@+id/chats_view_status" android:textColor="@android:color/secondary_text_light" android:ellipsize="marquee" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="available" android:singleLine="true" android:paddingLeft="2.0dip" android:layout_toRightOf="@+id/friend_status_icon" android:layout_below="@+id/chats_view_name" /> </RelativeLayout> </LinearLayout>

如果没图片,自己可以弄成android默认的。

看下效果:

现在就是想把好友间的分割线去掉 - . -

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。