Java Android SearchView'de rehber verilerini ListView'da gösterme

BayCoder

Hectopat
Katılım
8 Mart 2021
Mesajlar
533
Makaleler
4
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
Öncelikle selamlar, telefondaki rehbere erişip rehberdeki verileri ListView'de gösteren bir uygulama yapmaya çalışıyorum. Arama yapmayı da eklemek istedim. SearchView'i kullandım. Arama kısmında bir sıkıntı yok ama SearchView'in içi boş olunca tüm ListView verilerini ekranda göstermek istedim ama pek beceremedim. Yardımcı olabilir misiniz?


Java:
package com.yazbozkod.test;



import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;



import java.util.List;



public class ContactAdapter extends BaseAdapter {

    private Context context;

    private List<Rehber> contactList;



    public ContactAdapter(Context context, List<Rehber> contactList) {

        this.context = context;

        this.contactList = contactList;

    }



    @Override

    public int getCount() {

        return contactList.size();

    }



    @Override

    public Object getItem(int position) {

        return contactList.get(position);

    }



    @Override

    public long getItemId(int position) {

        return position;

    }



    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {

            convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_2, parent, false);

        }



        TextView nameTextView = convertView.findViewById(android.R.id.text1);

        TextView phoneTextView = convertView.findViewById(android.R.id.text2);



        Rehber contact = contactList.get(position);

        nameTextView.setText(contact.getName());

        phoneTextView.setText(contact.getPhoneNumber());



        return convertView;

    }

    public void setContactList(List<Rehber> contactList) {

        this.contactList = contactList;

        notifyDataSetChanged();

    }



}





Java:
package com.yazbozkod.test;



import android.content.ContentResolver;

import android.content.pm.PackageManager;

import android.database.Cursor;

import android.os.Bundle;



import androidx.core.content.ContextCompat;

import androidx.fragment.app.Fragment;



import android.provider.ContactsContract;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ListView;

import android.widget.SearchView;

import android.widget.Toast;



import java.text.Collator;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.Locale;



public class RehberFragment extends Fragment {



    private static final String ARG_PARAM1 = "param1";

    private static final String ARG_PARAM2 = "param2";

    private String mParam1;

    private String mParam2;

    ListView lvRehber;

    SearchView svRehber;

    List<Rehber> contactList;

    ContactAdapter contactAdapter;

    private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100;



    public RehberFragment() {

    }



    public static RehberFragment newInstance(String param1, String param2) {

        RehberFragment fragment = new RehberFragment();

        Bundle args = new Bundle();

        args.putString(ARG_PARAM1, param1);

        args.putString(ARG_PARAM2, param2);

        fragment.setArguments(args);

        return fragment;

    }



    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        if (getArguments() != null) {

            mParam1 = getArguments().getString(ARG_PARAM1);

            mParam2 = getArguments().getString(ARG_PARAM2);

        }

    }



    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_rehber, container, false);

        lvRehber = rootView.findViewById(R.id.lvRehber);

        svRehber = rootView.findViewById(R.id.svRehber);

        if (ContextCompat.checkSelfPermission(requireContext(), android.Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {

            requestPermissions(new String[]{android.Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);

        } else {

            getContacts();

            setAdapter();

        }

        svRehber.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

            @Override

            public boolean onQueryTextSubmit(String query) {

                return false;

            }



            @Override

            public boolean onQueryTextChange(String newText) {

                // Arama sorgusu değiştikçe verileri filtrele

                filterData(newText);

                return true;

            }

        });

        return rootView;

    }



    private void filterData(String newText) {

        List<Rehber> filteredList = new ArrayList<>();

        Locale currentLocale = Locale.getDefault();

        Collator collator = Collator.getInstance(currentLocale);

        collator.setStrength(Collator.PRIMARY);



        for (Rehber contact : contactList) {

            if (newText.isEmpty() || collator.compare(contact.getName().toLowerCase(currentLocale), newText.toLowerCase(currentLocale)) >= 0) {

                filteredList.add(contact);

            }

        }



        ContactAdapter adapter = (ContactAdapter) lvRehber.getAdapter();

        adapter.setContactList(filteredList);

    }





    //region İzin isteği sonucunu kontrol et

    @Override

    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

        if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) {

            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // İzin verildiyse, rehber verilerini al ve ListView'a aktar

                getContacts();

                setAdapter();

            } else {

                // İzin reddedildiyse, kullanıcıya bir geri bildirim gösterilebilir

                Toast.makeText(getContext(), "Rehber izni reddedildi.", Toast.LENGTH_SHORT).show();

            }

        }

    }

    //endregion



    //region setAdapter

    private void setAdapter() {

        Collections.sort(contactList, new Comparator<Rehber>() {

            @Override

            public int compare(Rehber contact1, Rehber contact2) {

                Collator collator = Collator.getInstance(Locale.getDefault());

                // İki Rehber nesnesini karşılaştır ve sıralama yap

                return collator.compare(contact1.getName(), contact2.getName());



            }

        });

        contactAdapter = new ContactAdapter(getContext(), contactList);

        lvRehber.setAdapter(contactAdapter);

    }

    //endregion



    //region Rehber verilerini al

    private void getContacts() {

        contactList = new ArrayList<>();



        ContentResolver contentResolver = requireContext().getContentResolver();

        Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

        if (cursor != null && cursor.getCount() > 0) {

            while (cursor.moveToNext()) {

                String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

                String isim = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));



                if (Integer.parseInt(cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {

                    Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,

                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);

                    if (phoneCursor != null && phoneCursor.moveToNext()) {

                        String numara = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));

                        contactList.add(new Rehber(isim, numara));

                    }

                    if (phoneCursor != null) {

                        phoneCursor.close();

                    }

                }

            }

        }

        if (cursor != null) {

            cursor.close();

        }

    }

    //endregion

}
[/CODE]
 
Son düzenleme:

Technopat Haberler

Yeni konular

Geri
Yukarı