600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android列表字母排序 Android 实现ListView的A-Z字母排序和过滤搜索功能 实现汉字转成拼音...

android列表字母排序 Android 实现ListView的A-Z字母排序和过滤搜索功能 实现汉字转成拼音...

时间:2021-04-03 08:33:09

相关推荐

android列表字母排序 Android 实现ListView的A-Z字母排序和过滤搜索功能 实现汉字转成拼音...

【实例简介】Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音

【实例截图】

【核心代码】

package com.example.sortlistview;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.text.Editable;

import android.text.TextUtils;

import android.text.TextWatcher;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

import com.example.sortlistview.SideBar.OnTouchingLetterChangedListener;

public class MainActivity extends Activity {

private ListView sortListView;

private SideBar sideBar;

private TextView dialog;

private SortAdapter adapter;

private ClearEditText mClearEditText;

/**

* 汉字转换成拼音的类

*/

private CharacterParser characterParser;

private List SourceDateList;

/**

* 根据拼音来排列ListView里面的数据类

*/

private PinyinComparator pinyinComparator;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViews();

}

private void initViews() {

//实例化汉字转拼音类

characterParser = CharacterParser.getInstance();

pinyinComparator = new PinyinComparator();

sideBar = (SideBar) findViewById(R.id.sidrbar);

dialog = (TextView) findViewById(R.id.dialog);

sideBar.setTextView(dialog);

//设置右侧触摸监听

sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {

@Override

public void onTouchingLetterChanged(String s) {

//该字母首次出现的位置

int position = adapter.getPositionForSection(s.charAt(0));

if(position != -1){

sortListView.setSelection(position);

}

}

});

sortListView = (ListView) findViewById(R.id.country_lvcountry);

sortListView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view,

int position, long id) {

//这里要利用adapter.getItem(position)来获取当前position所对应的对象

Toast.makeText(getApplication(), ((SortModel)adapter.getItem(position)).getName(), Toast.LENGTH_SHORT).show();

}

});

SourceDateList = filledData(getResources().getStringArray(R.array.date));

// 根据a-z进行排序源数据

Collections.sort(SourceDateList, pinyinComparator);

adapter = new SortAdapter(this, SourceDateList);

sortListView.setAdapter(adapter);

mClearEditText = (ClearEditText) findViewById(R.id.filter_edit);

//根据输入框输入值的改变来过滤搜索

mClearEditText.addTextChangedListener(new TextWatcher() {

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

//当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表

filterData(s.toString());

}

@Override

public void beforeTextChanged(CharSequence s, int start, int count,

int after) {

}

@Override

public void afterTextChanged(Editable s) {

}

});

}

/**

* 为ListView填充数据

* @param date

* @return

*/

private List filledData(String [] date){

List mSortList = new ArrayList();

for(int i=0; i

SortModel sortModel = new SortModel();

sortModel.setName(date[i]);

//汉字转换成拼音

String pinyin = characterParser.getSelling(date[i]);

String sortString = pinyin.substring(0, 1).toUpperCase();

// 正则表达式,判断首字母是否是英文字母

if(sortString.matches("[A-Z]")){

sortModel.setSortLetters(sortString.toUpperCase());

}else{

sortModel.setSortLetters("#");

}

mSortList.add(sortModel);

}

return mSortList;

}

/**

* 根据输入框中的值来过滤数据并更新ListView

* @param filterStr

*/

private void filterData(String filterStr){

List filterDateList = new ArrayList();

if(TextUtils.isEmpty(filterStr)){

filterDateList = SourceDateList;

}else{

filterDateList.clear();

for(SortModel sortModel : SourceDateList){

String name = sortModel.getName();

if(name.indexOf(filterStr.toString()) != -1 || characterParser.getSelling(name).startsWith(filterStr.toString())){

filterDateList.add(sortModel);

}

}

}

// 根据a-z进行排序

Collections.sort(filterDateList, pinyinComparator);

adapter.updateListView(filterDateList);

}

}

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