android控件开发之ExpandableListActivity(二)

android控件开发之ExpandableListActivity(二)

本博文主要讲述的是使用ExpandableListActivity创建一个类似QQ中好友列表的功能。下面我们直接来看实现的代码吧。

本实例中有一个Activity,和一个主布局文件。其他的一级目录和二级目录分别是通过重写ExpandableListActivity中的getGroupView()和getChildView()方法来实现的布局

MainActivity.java代码如下:

此Activity主要是extends自ListActivity类,

package com.example.expandablelistactivity;

import java.util.ArrayList;

import java.util.HashMap;

import android.os.Bundle;

import android.app.ListActivity;

import android.database.DataSetObserver;

import android.graphics.Color;

import android.view.Gravity;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AbsListView;

import android.widget.ExpandableListAdapter;

import android.widget.ExpandableListView;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.SimpleExpandableListAdapter;

import android.widget.ExpandableListView.OnChildClickListener;

import android.widget.TextView;

/*

主要是通过重写ExpandableListAdapter()中的相关方法来实现

*/

public class MainActivity extends ListActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//匿名内部类,重写ExpandableListAdapter类的方法

final ExpandableListAdapter ela = new ExpandableListAdapter() {

//设置组视图的图片

int[] logos = new int[] { R.drawable.ic_launcher, R.drawable.ic_launcher,R.drawable.ic_launcher};

//设置组视图的显示文字

private String[] generalsTypes = new String[] { "group1", "group2" };

//子视图显示文字

private String[][] generals = new String[][] {

{ "child1data1", "child1data2", "child1data3"},

{ "child2data1"}

};

//子视图图片

public int[][] generallogos = new int[][] {

{ R.drawable.list1, R.drawable.list2,

R.drawable.list3 },

{ R.drawable.list4 } };

//自己定义一个获得文字信息的方法

TextView getTextView() {

//设置textView的高度和宽度

AbsListView.LayoutParams lp = new AbsListView.LayoutParams(

ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

TextView textView = new TextView(

MainActivity.this);

textView.setLayoutParams(lp);

textView.setGravity(Gravity.CENTER_VERTICAL);

textView.setPadding(10, 10, 10, 10);

textView.setTextSize(15);

textView.setTextColor(Color.BLACK);

return textView;

}

//重写ExpandableListAdapter中的各个方法

@Override

public int getGroupCount() {

// TODO Auto-generated method stub

return generalsTypes.length;

}

@Override

public Object getGroup(int groupPosition) {

// TODO Auto-generated method stub

return generalsTypes[groupPosition];

}

@Override

public long getGroupId(int groupPosition) {

// TODO Auto-generated method stub

return groupPosition;

}

@Override

public int getChildrenCount(int groupPosition) {

// TODO Auto-generated method stub

return generals[groupPosition].length;

}

@Override

public Object getChild(int groupPosition, int childPosition) {

// TODO Auto-generated method stub

return generals[groupPosition][childPosition];

}

@Override

public long getChildId(int groupPosition, int childPosition) {

// TODO Auto-generated method stub

return childPosition;

}

@Override

public boolean hasStableIds() {

// TODO Auto-generated method stub

return true;

}

@Override

public View getGroupView(int groupPosition, boolean isExpanded,

View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

//创建一个LinearLayout视图

LinearLayout ll = new LinearLayout(

MainActivity.this);

ll.setOrientation(0);

//创建一个ImageView对象

ImageView logo = new ImageView(MainActivity.this);

logo.setImageResource(logos[groupPosition]);

logo.setPadding(50, 0, 0, 0);

//在LinearLayout中添加一个ImageView

ll.addView(logo);

//创建一个TextView对象

TextView textView = getTextView();

textView.setTextColor(Color.BLACK);

textView.setText(getGroup(groupPosition).toString());

//将TextView添加到LinearLayout中

ll.addView(textView);

return ll;

}

@Override

public View getChildView(int groupPosition, int childPosition,

boolean isLastChild, View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

//创建一个LinearLayout对象

LinearLayout ll = new LinearLayout(

MainActivity.this);

ll.setOrientation(0);

//创建一个ImageView对象

ImageView generallogo = new ImageView(

MainActivity.this);

generallogo.setImageResource(generallogos[groupPosition][childPosition]);

generallogo.setPadding(5, 5, 5, 5);

//将imageView对象添加到LinearLayout对象中

ll.addView(generallogo);

//创建一个TextView对象

TextView textView = getTextView();

textView.setText(getChild(groupPosition, childPosition)

.toString());

ll.addView(textView);

return ll;

}

@Override

public boolean isChildSelectable(int groupPosition,

int childPosition) {

// TODO Auto-generated method stub

return true;

}

@Override

public boolean areAllItemsEnabled() {

// TODO Auto-generated method stub

return false;

}

@Override

public long getCombinedChildId(long groupId, long childId) {

// TODO Auto-generated method stub

return 0;

}

@Override

public long getCombinedGroupId(long groupId) {

// TODO Auto-generated method stub

return 0;

}

@Override

public boolean isEmpty() {

// TODO Auto-generated method stub

return false;

}

@Override

public void onGroupCollapsed(int groupPosition) {

// TODO Auto-generated method stub

}

@Override

public void onGroupExpanded(int groupPosition) {

// TODO Auto-generated method stub

}

@Override

public void registerDataSetObserver(DataSetObserver observer) {

// TODO Auto-generated method stub

}

@Override

public void unregisterDataSetObserver(DataSetObserver observer) {

// TODO Auto-generated method stub

}};

//给ExpandableListView设置SimpleExpandableListAdapter适配器

ExpandableListView expandableListView = (ExpandableListView)findViewById(android.R.id.list);

expandableListView.setAdapter(ela);

//绑定ExpandableListView child的监听器

expandableListView.setOnChildClickListener(new expandableChildLisenter());

}

//实现二级菜单监听器

class expandableChildLisenter implements OnChildClickListener{

@Override

public boolean onChildClick(ExpandableListView parent, View v,

int groupPosition, int childPosition, long id) {

// TODO Auto-generated method stub

System.out.println("group = " + groupPosition);

System.out.println("child = " + childPosition);

System.out.println("id = " + id);

return false;

}

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

}

主布局文件main.xml:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

<TextView

android:id="@+id/myText"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/hello_world" />

<!--设置ExpandableListView主界面的布局文件  -->

<ExpandableListView

android:id="@id/android:list"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:padding="5dp"

android:layout_below="@id/myText"

></ExpandableListView>

</RelativeLayout>

所用到的图片资源有:

R.drawable.list1

R.drawable.list2

R.drawable.list3

R.drawable.list4

R.drawable.ic_launcher

实现的效果如下:

时间: 2024-11-08 09:28:20

android控件开发之ExpandableListActivity(二)的相关文章

android控件开发之ExpandableListActivity

android控件开发之ExpandableListActivity 本博文主要讲述的是android控件开发中的ExpandableListActivity(可扩展List)控件的简单用法. java代码: package com.example.expandablelistactivity; import java.util.ArrayList; import java.util.HashMap; import android.os.Bundle; import android.app.Li

android控件开发之Spinner控件

android控件开发之Spinner控件 概述:android中,Spinner控件主要是用来显示下拉列表,同时,用户可以选择列表中的数据,作为当前的选择 java代码: 此代码中使用了两种方法给Spinner提供数据(method 1和method 2).运行时任选其一即可 方法一: 使用的动态list的形式给Spinner提供数据 方法二: 使用的Strings.xml中定义的固定String array提供数据 根据项目需要,选择相关方法即可 package com.example.sp

android控件开发之ListView

android控件开发之ListView 本文主要讲述安卓开发中的ListView控件的使用方法 java代码: package com.example.listview; import java.util.ArrayList; import java.util.HashMap; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.View

android控件开发之progress

android控件开发之progress 本博文主要讲述的是android开发中的progress进度条的使用方法,代码如下: MainActivity.java: package com.example.progress; import android.os.Bundle; import android.R.integer; import android.app.Activity; import android.view.Menu; import android.view.View; impo

android控件开发之Radio(单选按钮)和CheckBox(多选按钮)开发

android控件开发之Radio(单选按钮)和CheckBox(多选按钮)开发 本博文主要讲述的是android开发中的单选和多选按钮的使用,具体情况请看实例代码: MainActivity.java: package com.example.radiotest; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.CheckBox; imp

android控件开发之SeekBar

android控件开发之SeekBar 本博文主要讲述的是SeekBar的使用,此控件在播放器中使用时相当的广泛.下面我们直接来看看代码吧! mainActivity.java: package com.example.seekbar; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.SeekBar; public class MainAc

android控件开发之RatingBar

android控件开发之RatingBar 本博文主要讲述的RatingBar的开发,此控件主要是用做评分,评级中使用,下面我们来看看实例代码: MainActivity.java: package com.example.ratingbar; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.RatingBar; public class

android控件开发之TimePicker和DatePicker

android控件开发之TimerPicker和DatePicker java代码: package com.example.timepicker; import android.os.Bundle; import android.app.Activity; import android.app.DatePickerDialog; import android.app.Dialog; import android.app.TimePickerDialog; import android.view

android控件开发之AutoCompleteTextView

android控件开发之AutoCompleteTextView 此控件主要是用在当客户需要输入某些内容时,会提示补全信息供用户选择,用以减少客户的输入操作 此控件中的选择数据,可以是自定义的String数组数据,也可以是list列表数据 JAVA代码: package com.example.autocompletetext; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; i