用两个listView实现手机通讯的功能

用两个listView实现手机通讯的功能

主要的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;

    //这个boolean值作用很大,包括了搜索,布局和数据都要用到.
    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<>();

        //97 a
        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);

//        leftList.add(new Person("小明",""));
//        leftList.add(new Person("小明1",""));
//        leftList.add(new Person("小明2",""));
//        leftList.add(new Person("大明",""));
//        leftList.add(new Person("小明1",""));
//        leftList.add(new Person("小明2",""));
//        leftList.add(new Person("黑猪",""));
//        leftList.add(new Person("花猪1",""));
//        leftList.add(new Person("大妞1",""));
//        leftList.add(new Person("大鲵1",""));
//        leftList.add(new Person("大鲵2",""));



        //排序
        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;
            }
        });



//        new int[]{1,1,2,3,4,4,5};


        //把汉字换成拼音
//        String s = "冯红";
        //取拼音
//        String s1 = PinyinHelper.convertToPinyinString(s, "", PinyinFormat.WITHOUT_TONE);
        //取首字母
//        String shortPinyin = PinyinHelper.getShortPinyin(s);/
//        Toast.makeText(this, shortPinyin.toUpperCase(), Toast.LENGTH_SHORT).show();



        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();

                /**
                 * 如果搜索到匹配的数据了,只显示匹配的数据_1,清空以后再添加
                 */
                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();
                    }
                }
                //如果没有查到匹配的数据,就Toast提示用户.
                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) {
//                Toast.makeText(MainActivity.this, "bofor", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
//                Toast.makeText(MainActivity.this, "changed", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void afterTextChanged(Editable s) {

                flag = false;
//                Toast.makeText(MainActivity.this, "after", Toast.LENGTH_SHORT).show();
                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;
        }


        /**
         * 是哪个布局的
         *
         * @param position
         * @return
         */
        @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 (position == 0) {
//                viewHolder.name.setText(PinyinHelper.getShortPinyin(leftList.get(position).substring(0, 1)).toUpperCase());
//                viewHolder.name.setBackgroundColor(Color.GRAY);
//            }

            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>
发布了27 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/shuai_ge_feng/article/details/103210994