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++) {
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);
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);
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);
}
}
}