7单元

package com.example.day1108_2;

import android.Manifest;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

import com.example.day1108_2.adapter.MyAdapter;
import com.example.day1108_2.adapter.MyListAdapter;
import com.example.day1108_2.bean.Bean;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {


    private LinearLayout leanLayout;



    private RecyclerView recyclerFind;
    private EditText editFind;
    private Button buttonCancel;
    private RecyclerView recycler;
    private ListView listView;
    //数据源
    private List<Bean> list=new ArrayList<>();
    private List<String> numberList=new ArrayList<>();
    private List<Bean> findList=new ArrayList<>();
    //适配器
    private MyAdapter myAdapter;
    private MyListAdapter myListAdapter;
    private MyAdapter myAdapter_find;
    //比对标题
    private String title_;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
            requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},100);
        }
        //初始化
        initView();
        //初始化数据
        initData();
    }

    private void initData() {
        Uri uri= ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        Cursor query = getContentResolver().query(uri, null, null, null, "phonebook_label");
        if (query!=null){
            while (query.moveToNext()){
                String name = query.getString(query.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                String number = query.getString(query.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                String title = query.getString(query.getColumnIndex("phonebook_label"));
                if (title.equals(title_)){
                    list.add(new Bean(name,number,title,1));
                }else {
                    list.add(new Bean("","",title,0));
                    list.add(new Bean(name,number,title,1));
                    title_=title;
                }
            }
            query.close();
        }
        //适配器刷新
        myAdapter.notifyDataSetChanged();
        for(int i='A';i<='Z';i++){
            numberList.add((char)i+"");
        }
    }

    private void initView() {
        editFind = (EditText) findViewById(R.id.edit_find);
        buttonCancel = (Button) findViewById(R.id.button_cancel);
        recycler = (RecyclerView) findViewById(R.id.recycler);
        listView = (ListView) findViewById(R.id.listView);
        recyclerFind = (RecyclerView) findViewById(R.id.recycler_find);
        leanLayout = (LinearLayout) findViewById(R.id.leanLayout);

        myAdapter=new MyAdapter(this,list);
        recycler.setAdapter(myAdapter);
        final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recycler.setLayoutManager(linearLayoutManager);

        myListAdapter=new MyListAdapter(this,numberList);
        listView.setAdapter(myListAdapter);

        myAdapter_find=new MyAdapter(this,findList);
        recyclerFind.setAdapter(myAdapter_find);
        recyclerFind.setLayoutManager(new LinearLayoutManager(this));
        //点击滚动
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String s = numberList.get(position);//获取电极的内容
                for (int i = 0; i < list.size(); i++) {
                    //从左边的集合信号第一个title的下标
                    String title = list.get(i).getTitle();
                    if (title.equals(s)){
                        linearLayoutManager.scrollToPositionWithOffset(i,0);
                        Toast.makeText(MainActivity.this, ""+title, Toast.LENGTH_SHORT).show();
                        break;
                    }
                }
            }
        });
        //搜索联系人
        editFind.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) {
                //将数据先清空
                findList.clear();
                //隐藏和显示
                recyclerFind.setVisibility(View.VISIBLE);
//                recycler.setVisibility(View.GONE);//隐藏联系人
//                listView.setVisibility(View.GONE);//隐藏右侧索引
                leanLayout.setVisibility(View.GONE);
                String find = editFind.getText().toString();
                for (int i = 0; i < list.size(); i++) {
                    String name = list.get(i).getName();//得到当前位的名字
                    if (name.contains(find)){//判断是否包含
                        findList.add(list.get(i)); //如果包含则存入集合
                    }
                }
                myAdapter_find.notifyDataSetChanged();
            }

            @Override
            public void afterTextChanged(Editable s) {
                    //搜索后
            }
        });
        //取消
        buttonCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显示和隐藏
                 recyclerFind.setVisibility(View.GONE);
                leanLayout.setVisibility(View.VISIBLE);
//                recycler.setVisibility(View.VISIBLE);
//                listView.setVisibility(View.VISIBLE);
                editFind.setText("");
            }
        });

    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode==100&&grantResults[0]== PackageManager.PERMISSION_GRANTED){
        }else {
            Toast.makeText(this, "未获得权限", Toast.LENGTH_SHORT).show();
            finish();
        }
    }
}

适配器

package com.example.day1108_2.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.day1108_2.R;
import com.example.day1108_2.bean.Bean;

import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private Context context;
    private List<Bean> list;
    private LayoutInflater layoutInflater;

    public MyAdapter(Context context, List<Bean> list) {
        this.context = context;
        this.list = list;
        layoutInflater=LayoutInflater.from(context);
    }


    @Override
    public int getItemViewType(int position) {
        return list.get(position).getType();
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        if (i==Bean.TYPE_TITLE){
            return new TitleHolder(layoutInflater.inflate(R.layout.layout_title,viewGroup,false));
        }else {
            return new PersonHolder(layoutInflater.inflate(R.layout.layout_person,viewGroup,false));
        }
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        if (getItemViewType(i)==Bean.TYPE_TITLE){
            TitleHolder titleHolder= (TitleHolder) viewHolder;
            titleHolder.title.setText(list.get(i).getTitle());
        }else {
            PersonHolder personHolder= (PersonHolder) viewHolder;
            personHolder.name.setText(list.get(i).getName());
            personHolder.number.setText(list.get(i).getNumber());
        }
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class TitleHolder extends RecyclerView.ViewHolder{
        private TextView title;
        public TitleHolder(@NonNull View itemView) {
            super(itemView);
            title=itemView.findViewById(R.id.text_title);
        }
    }
    public class PersonHolder extends RecyclerView.ViewHolder{
        private TextView name;
        private TextView number;
        public PersonHolder(@NonNull View itemView) {
            super(itemView);
            name=itemView.findViewById(R.id.text_person_name);
            number=itemView.findViewById(R.id.text_person_number);
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值