比较好奇,就想着动手实现下,比较麻烦,期间各种问题搞得很头大没看着很简单,但是实现还是有一点烦,先看效果
主要难点在一
1 getView实现字母分割与城市列表显示问题,
2 .listVIew的代码优化问题造成ListView界面显示混乱
3.对windowManager添加view以及移除问题,
ok,就这个三个难点,当然写的多了,也就不会感觉难了,写过后,居然发现这个tm这么简单,为啥自己花了这么长的时间,好了 ,废话少说,直接来吧
1 ,创建一个Display类,用于判断显示的是title还是城市名,可能现在不理解,没关系,看代码,你就懂了,主要功能是,通过这个来实现不同的显示效果
package com.example.stronglistview;
/**
* 这里type的设置是为了区分城市名和字母列表
* 1 城市列表
* 2 城市简称开头
*/
public class Display {
public static final int COMMOND = 1;//带表显示的是城市名称
public static final int TITLE = 2;//代表显示的是字母的标题
private String name;
private int type;
public Display(String name, int type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
这个就不用再说了,下面会理解的
下面是对适配器的实现
package com.example.stronglistview;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MyListAdapter extends BaseAdapter {
private int length;
String[][] city = {
{
"安庆"},
{
"北京", "八达岭", "八公山", "蚌埠"},
{
"成都", "长安", "重庆", "池州"},
{
"东京", "东北", "大连"},
{
"阜阳", "福州", "福建"},
{
"广州", "广东"}};
//这里我只是给出了部分的数据,懒得去写,太多了,只是一个例子
String[] title = {
"A", "B", "C", "D", "F", "G"};
Display[] displays;
Context context;
private String TAG = "test";
public MyListAdapter(Context context) {
this.context = context;
displays = getSingleData();
length = displays.length;
}
public int getDataCount() {
int count = 0;
for (int i = 0; i < city.length; i++) {
for (int j = 0; j < city[i].length; j++) {
count++;
}
}
count += title.length;
return count;
}
//这里我将所有的数据全部整合到一个data数组中,并对添加的是title还是城市名称做了不同的类型
private Display[] getSingleData() {
Display[] data = new Display[getDataCount()];
int index = 0;
for (int i = 0; i < city.length; i++) {
data[index] = new Display(title[i], Display.TITLE);
for (int j = 0; j < city[i].length; j++) {
index++;
data[index] = new Display(city[i][j], Display.COMMOND);
}
index++;
}
return data;
}
@Override
public int