主要的activity代码
package com.example.month1;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.github.stuxuhai.jpinyin.PinyinFormat;
import com.github.stuxuhai.jpinyin.PinyinHelper;
import java.sql.Connection;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private EditText searchContent;
private Button search;
private ListView left;
private ListView right;
private LinkedList<String> rightList;
private boolean flag = false;
private ArrayAdapter<String> stringArrayAdapter;
private List<String> leftList;
private List<String> searchList;
private MyAdapter myAdapter;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rightList = new LinkedList<>();
searchList = new ArrayList<>();
for (int i = 97; i < 26+97; i++) {
String s = String.valueOf((char) (i));
rightList.add(s.toUpperCase());
}
leftList = new ArrayList<>();
leftList.add("啊啊");
leftList.add("暗暗");
leftList.add("安安");
leftList.add("不要啊");
leftList.add("不要啊1");
leftList.add("不要啊2");
leftList.add("小明2");
leftList.add("小明1");
leftList.add("大明");
leftList.add("小明1");
leftList.add("小明2");
leftList.add("黑猪");
leftList.add("花猪1");
leftList.add("大妞1");
leftList.add("大鲵1");
leftList.add("ddd");
leftList.add("ddd2");
leftList.add("冯帅");
leftList.add("帅哥冯");
leftList.add("帅冯");
leftList.add("你我");
leftList.add("你帅");
leftList.add("我帅");
leftList.add("咱们俩都帅");
leftList.add("黑猪贵");
searchList.addAll(leftList);
Collections.sort(leftList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Collator instance = Collator.getInstance(Locale.CHINA);
int i = instance.getCollationKey(o1).compareTo(instance.getCollationKey(o2));
return i;
}
});
Collections.sort(searchList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Collator instance = Collator.getInstance(Locale.CHINA);
int i = instance.getCollationKey(o1).compareTo(instance.getCollationKey(o2));
return i;
}
});
searchContent = (EditText) findViewById(R.id.search_content);
search = (Button) findViewById(R.id.search);
left = (ListView) findViewById(R.id.left);
right = (ListView) findViewById(R.id.right);
right.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String s = rightList.get(position);
for (int i = 0; i < leftList.size(); i++) {
String shortPinyin = PinyinHelper.getShortPinyin(leftList.get(i).substring(0, 1).toUpperCase());
if(s.equalsIgnoreCase(shortPinyin)){
Toast.makeText(MainActivity.this, shortPinyin, Toast.LENGTH_SHORT).show();
left.setSelection(i);
break;
}
}
}
});
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = searchContent.getText().toString();
for (int i = 0; i < leftList.size(); i++) {
if(s.equals(leftList.get(i))){
flag = true;
leftList.clear();
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
leftList.add(s);
myAdapter.notifyDataSetChanged();
}
}
if(!flag){
Toast.makeText(MainActivity.this, "没有匹配的", Toast.LENGTH_SHORT).show();
leftList.clear();
myAdapter.notifyDataSetChanged();
}
}
});
stringArrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, rightList);
right.setAdapter(stringArrayAdapter);
searchContent.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
flag = false;
String s1 = searchContent.getText().toString();
if (s1.equals("") || s1 == null){
leftList.clear();
leftList.addAll(searchList);
myAdapter.notifyDataSetChanged();
}
}
});
myAdapter = new MyAdapter();
left.setAdapter(myAdapter);
}
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return leftList.size();
}
@Override
public Object getItem(int position) {
return leftList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (flag){
return 1;
}
if (position == 0) {
return 0;
} else {
String shortPinyin = PinyinHelper.getShortPinyin(leftList.get(position).substring(0, 1));
String shortPinyin2 = PinyinHelper.getShortPinyin(leftList.get(position - 1).substring(0, 1));
if (shortPinyin.equals(shortPinyin2)) {
return 1;
}
}
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
ViewHolder2 viewHolder2 = null;
if (convertView == null) {
if (getItemViewType(position) == 0) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.person_layout, null);
viewHolder.name = convertView.findViewById(R.id.name);
viewHolder.info = convertView.findViewById(R.id.name_info);
convertView.setTag(viewHolder);
} else {
viewHolder2 = new ViewHolder2();
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.person_layout2, null);
viewHolder2.info = convertView.findViewById(R.id.info);
convertView.setTag(viewHolder2);
}
} else {
if (getItemViewType(position) == 0) {
viewHolder = (ViewHolder) convertView.getTag();
} else {
viewHolder2 = (ViewHolder2) convertView.getTag();
}
}
if (getItemViewType(position) == 0) {
if (position >= 0 && position < leftList.size() - 1) {
String shortPinyin = PinyinHelper.getShortPinyin(leftList.get(position).substring(0, 1));
viewHolder.name.setText(shortPinyin.toUpperCase());
viewHolder.name.setBackgroundColor(Color.GRAY);
viewHolder.info.setText(leftList.get(position));
}
} else {
viewHolder2.info.setText(leftList.get(position));
}
return convertView;
}
class ViewHolder {
TextView name;
TextView info;
}
class ViewHolder2 {
TextView info;
}
}
}
xml的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_weight="7"
android:id="@+id/search_content"
android:background="@android:drawable/edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</EditText>
<Button
android:layout_weight="1"
android:id="@+id/search"
android:text="搜索"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_weight="10"
android:layout_width="0dp"
android:layout_height="match_parent">
<ListView
android:id="@+id/left"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
<LinearLayout
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent">
<ListView
android:id="@+id/right"
android:divider="@null"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
</LinearLayout>
</LinearLayout>