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?
[/CODE]
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
}
Son düzenleme: