Bu sayfada, kullanıcı arayüzünüze nasıl QuickContactBadge
ekleyeceğiniz ve verileri buna nasıl bağlayacağınız gösterilmektedir. QuickContactBadge
, başlangıçta küçük resim olarak görünen bir widget'tır. Küçük resim için herhangi bir Bitmap
kullanabilirsiniz ancak genellikle kişinin fotoğraf küçük resminden kodu çözülmüş bir Bitmap
kullanırsınız.
Küçük resim bir kontrol görevi görür. Kullanıcılar resme dokunduğunda QuickContactBadge
aşağıdakileri içeren bir iletişim kutusuna genişler:
- Büyük resim
- Kişiyle ilişkilendirilmiş büyük resim veya resim yoksa bir yer tutucu grafiği.
- Uygulama simgeleri
- Yerleşik bir uygulama tarafından işlenebilecek her ayrıntı veri parçası için bir uygulama simgesi. Örneğin, kişinin ayrıntıları bir veya daha fazla e-posta adresi içeriyorsa bir e-posta simgesi görünür. Kullanıcılar simgeye dokunduğunda, kişinin tüm e-posta adresleri görünür. Kullanıcılar adreslerden birine dokunduğunda, e-posta uygulamasında, seçilen e-posta adresi için ileti oluşturmak için bir ekran görüntülenir.
QuickContactBadge
görünümü, bir kişinin bilgilerine anında erişim ve bu kişiyle iletişim kurmanın hızlı bir yolunu sağlar. Kullanıcıların kişi araması, bilgileri bulup kopyalaması, ardından uygun uygulamaya yapıştırmaları gerekmez. Bunun yerine QuickContactBadge
simgesine dokunabilir, kullanmak istedikleri iletişim yöntemini seçebilir ve söz konusu yöntemle ilgili bilgileri doğrudan ilgili uygulamaya gönderebilirler.
QuickContactBadge görünümü ekleme
QuickContactBadge
eklemek için düzeninize aşağıdaki örnekte gösterildiği gibi bir <QuickContactBadge>
öğesi ekleyin:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> ... <QuickContactBadge android:id=@+id/quickbadge android:layout_height="wrap_content" android:layout_width="wrap_content" android:scaleType="centerCrop"/> ... </RelativeLayout>
Sağlayıcı verilerini alma
QuickContactBadge
içinde bir kişiyi görüntülemek için kişi için bir içerik URI'sine ve küçük resim için Bitmap
'ye ihtiyacınız vardır. Hem içerik URI'si hem de Bitmap
, Kişi Sağlayıcı'dan alınan sütunlardan oluşturulur. Bu sütunları, Cursor
öğenize veri yüklemek için kullandığınız projeksiyonun bir parçası olarak belirtin.
Android 3.0 (API düzeyi 11) ve sonraki sürümler için projeksiyonunuza aşağıdaki sütunları ekleyin:
Android 2.3.3 (API düzeyi 10) ve önceki sürümleri için aşağıdaki sütunları kullanın:
Bu sayfadaki örneklerde, bu sütunları ve seçilen diğer sütunları içeren bir Cursor
öğesinin yüklendiği varsayılmaktadır. Cursor
içindeki sütunları nasıl alacağınızı öğrenmek için
Kişi listesini alma konusuna bakın.
Kişi URI'sini ve küçük resmi ayarlama
Gerekli sütunları oluşturduktan sonra verileri QuickContactBadge
öğesine bağlayabilirsiniz.
Kişi URI'sini ayarlama
Kişinin içerik URI'sini ayarlamak üzere CONTENT_LOOKUP_URI
almak için getLookupUri(id,lookupKey)
yöntemini, ardından kişiyi ayarlamak için assignContactUri()
yöntemini çağırın. Bu, aşağıdaki örnekte gösterilmiştir:
Kotlin
// The Cursor that contains contact rows var cursor: Cursor? = null // The index of the _ID column in the Cursor var idColumn: Int = 0 // The index of the LOOKUP_KEY column in the Cursor var lookupKeyColumn: Int = 0 // A content URI for the desired contact var contactUri: Uri? = null // A handle to the QuickContactBadge view ... cursor?.let { cursor -> /* * Insert code here to move to the desired cursor row */ // Gets the _ID column index idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID) // Gets the LOOKUP_KEY index lookupKeyColumn = cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY) // Gets a content URI for the contact contactUri = ContactsContract.Contacts.getLookupUri( cursor.getLong(idColumn), cursor.getString(lookupKeyColumn) ) binding.badge.assignContactUri(contactUri) }
Java
// The Cursor that contains contact rows Cursor cursor; // The index of the _ID column in the Cursor int idColumn; // The index of the LOOKUP_KEY column in the Cursor int lookupKeyColumn; // A content URI for the desired contact Uri contactUri; ... /* * Insert code here to move to the desired cursor row */ // Gets the _ID column index idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID); // Gets the LOOKUP_KEY index lookupKeyColumn = cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY); // Gets a content URI for the contact contactUri = Contacts.getLookupUri( cursor.getLong(idColumn), cursor.getString(lookupKeyColumn) ); binding.badge.assignContactUri(contactUri);
Kullanıcılar QuickContactBadge
simgesine dokunduğunda, kişinin ayrıntıları iletişim kutusunda görünür.
Fotoğraf küçük resmini ayarlama
QuickContactBadge
için kişi URI'sinin ayarlanması, kişinin küçük resmini otomatik olarak yüklemez. Fotoğrafı yüklemek için kişinin Cursor
satırından fotoğrafa ilişkin bir URI alın, sıkıştırılmış küçük fotoğrafı içeren dosyayı açmak için bunu kullanın ve dosyayı Bitmap
olarak okuyun.
Not: PHOTO_THUMBNAIL_URI
sütunu, 3.0'dan önceki platform sürümlerinde kullanılamaz. Bu sürümler için URI'yi Contacts.Photo
alt tablosundan almanız gerekir.
Öncelikle, Contacts._ID
ve Contacts.LOOKUP_KEY
sütunlarını içeren Cursor
öğesine erişmek için değişkenleri ayarlayın:
Kotlin
// The column in which to find the thumbnail ID var thumbnailColumn: Int = 0 /* * The thumbnail URI, expressed as a String. * Contacts Provider stores URIs as String values. */ var thumbnailUri: String? = null ... cursor?.let { cursor -> /* * Gets the photo thumbnail column index if * platform version >= Honeycomb */ thumbnailColumn = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI) // Otherwise, sets the thumbnail column to the _ID column } else { idColumn } /* * Assuming the current Cursor position is the contact you want, * gets the thumbnail ID */ thumbnailUri = cursor.getString(thumbnailColumn) }
Java
// The column in which to find the thumbnail ID int thumbnailColumn; /* * The thumbnail URI, expressed as a String. * Contacts Provider stores URIs as String values. */ String thumbnailUri; ... /* * Gets the photo thumbnail column index if * platform version >= Honeycomb */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { thumbnailColumn = cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI); // Otherwise, sets the thumbnail column to the _ID column } else { thumbnailColumn = idColumn; } /* * Assuming the current Cursor position is the contact you want, * gets the thumbnail ID */ thumbnailUri = cursor.getString(thumbnailColumn); ...
Kişi için fotoğrafla ilgili verileri alan ve hedef görünüm için boyutları ile doğru boyutlu küçük resmi Bitmap
içinde döndüren bir yöntem tanımlayın. Küçük resmi işaret eden bir URI oluşturarak başlayın:
Kotlin
/** * Load a contact photo thumbnail and return it as a Bitmap, * resizing the image to the provided image dimensions as needed. * @param photoData photo ID Prior to Honeycomb, the contact's _ID value. * For Honeycomb and later, the value of PHOTO_THUMBNAIL_URI. * @return A thumbnail Bitmap, sized to the provided width and height. * Returns null if the thumbnail is not found. */ private fun loadContactPhotoThumbnail(photoData: String): Bitmap? { // Creates an asset file descriptor for the thumbnail file var afd: AssetFileDescriptor? = null // try-catch block for file not found try { // Creates a holder for the URI val thumbUri: Uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // If Android 3.0 or later, // sets the URI from the incoming PHOTO_THUMBNAIL_URI Uri.parse(photoData) } else { // Prior to Android 3.0, constructs a photo Uri using _ID /* * Creates a contact URI from the Contacts content URI * incoming photoData (_ID) */ val contactUri: Uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, photoData) /* * Creates a photo URI by appending the content URI of * Contacts.Photo */ Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY) } /* * Retrieves an AssetFileDescriptor object for the thumbnail URI * using ContentResolver.openAssetFileDescriptor */ afd = activity?.contentResolver?.openAssetFileDescriptor(thumbUri, "r") /* * Gets a file descriptor from the asset file descriptor. * This object can be used across processes. */ return afd?.fileDescriptor?.let {fileDescriptor -> // Decodes the photo file and returns the result as a Bitmap // if the file descriptor is valid BitmapFactory.decodeFileDescriptor(fileDescriptor, null, null) } } catch (e: FileNotFoundException) { /* * Handle file not found errors */ null } finally { // In all cases, close the asset file descriptor try { afd?.close() } catch (e: IOException) { } } }
Java
/** * Load a contact photo thumbnail and return it as a Bitmap, * resizing the image to the provided image dimensions as needed. * @param photoData photo ID Prior to Honeycomb, the contact's _ID value. * For Honeycomb and later, the value of PHOTO_THUMBNAIL_URI. * @return A thumbnail Bitmap, sized to the provided width and height. * Returns null if the thumbnail is not found. */ private Bitmap loadContactPhotoThumbnail(String photoData) { // Creates an asset file descriptor for the thumbnail file AssetFileDescriptor afd = null; // try-catch block for file not found try { // Creates a holder for the URI Uri thumbUri; // If Android 3.0 or later if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // Sets the URI from the incoming PHOTO_THUMBNAIL_URI thumbUri = Uri.parse(photoData); } else { // Prior to Android 3.0, constructs a photo Uri using _ID /* * Creates a contact URI from the Contacts content URI * incoming photoData (_ID) */ final Uri contactUri = Uri.withAppendedPath( ContactsContract.Contacts.CONTENT_URI, photoData); /* * Creates a photo URI by appending the content URI of * Contacts.Photo */ thumbUri = Uri.withAppendedPath( contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); } /* * Retrieves an AssetFileDescriptor object for the thumbnail URI * using ContentResolver.openAssetFileDescriptor */ afd = getActivity().getContentResolver(). openAssetFileDescriptor(thumbUri, "r"); /* * Gets a file descriptor from the asset file descriptor. * This object can be used across processes. */ FileDescriptor fileDescriptor = afd.getFileDescriptor(); // Decodes the photo file and returns the result as a Bitmap // if the file descriptor is valid if (fileDescriptor != null) { // Decodes the bitmap return BitmapFactory.decodeFileDescriptor( fileDescriptor, null, null); } // If the file isn't found } catch (FileNotFoundException e) { /* * Handle file not found errors */ // In all cases, close the asset file descriptor } finally { if (afd != null) { try { afd.close(); } catch (IOException e) {} } } return null; }
Bitmap
küçük resmini almak için kodunuzda loadContactPhotoThumbnail()
yöntemini çağırın ve sonucu QuickContactBadge
öğelerinizde fotoğraf küçük resmini ayarlamak için kullanın:
Kotlin
... /* * Decodes the thumbnail file to a Bitmap */ mThumbnailUri?.also { thumbnailUri -> loadContactPhotoThumbnail(thumbnailUri).also { thumbnail -> /* * Sets the image in the QuickContactBadge. * QuickContactBadge inherits from ImageView. */ badge.setImageBitmap(thumbnail) } }
Java
... /* * Decodes the thumbnail file to a Bitmap */ Bitmap mThumbnail = loadContactPhotoThumbnail(thumbnailUri); /* * Sets the image in the QuickContactBadge. * QuickContactBadge inherits from ImageView. */ badge.setImageBitmap(mThumbnail);
ListView'a QuickContactBadge ekleme
QuickContactBadge
, kişi listesini görüntüleyen ListView
öğesine faydalı bir ektir. Her kişinin küçük resmini görüntülemek için QuickContactBadge
öğesini kullanın. Kullanıcılar küçük resme dokunduğunda QuickContactBadge
iletişim kutusu görüntülenir.
QuickContactBadge öğesini ekleme
Başlamak için öğe düzeninize QuickContactBadge
görünüm öğesi ekleyin. Örneğin, aldığınız her kişi için bir QuickContactBadge
ve ad görüntülemek istiyorsanız aşağıdaki XML dosyasını bir düzen dosyasına yerleştirin:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <QuickContactBadge android:id="@+id/quickcontact" android:layout_height="wrap_content" android:layout_width="wrap_content" android:scaleType="centerCrop"/> <TextView android:id="@+id/displayname" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/quickcontact" android:gravity="center_vertical" android:layout_alignParentRight="true" android:layout_alignParentTop="true"/> </RelativeLayout>
Aşağıdaki bölümlerde bu dosyaya contact_item_layout.xml
adı verilmiştir.
Özel İmleç Adaptörü ayarlama
CursorAdapter
öğesini, QuickContactBadge
içeren bir ListView
öğesine bağlamak için CursorAdapter
aralığını kapsayan özel bir bağdaştırıcı tanımlayın. Bu yaklaşım, QuickContactBadge
öğesine bağlamadan önce Cursor
içindeki verileri işlemenizi sağlar. Bu yaklaşım, QuickContactBadge
öğesine birden fazla Cursor
sütununu bağlamanıza da olanak tanır. Bu işlemlerin hiçbiri normal bir CursorAdapter
içinde yapılamaz.
Tanımladığınız CursorAdapter
alt sınıfı, aşağıdaki yöntemleri geçersiz kılmalıdır:
CursorAdapter.newView()
-
Öğe düzenini içerecek yeni bir
View
nesnesini şişirir. Bu yöntemin geçersiz kılınmasında mağaza,QuickContactBadge
alt öğesi de dahil olmak üzere düzenin altView
nesnelerini işler. Bu yaklaşımı uygulayarak, yeni bir düzeni her genişlettiğinizde altView
nesnelerine herkese açık kullanıcı adları almak zorunda kalmazsınız.Herkese açık kullanıcı adlarını tek tek alt
View
nesnelerine alabilmeniz için bu yöntemi geçersiz kılmanız gerekir. Bu teknik, bunların bağlamalarınıCursorAdapter.bindView()
ürününde kontrol etmenizi sağlar. CursorAdapter.bindView()
-
Verileri mevcut
Cursor
satırından öğe düzeninin altView
nesnelerine taşır. Hem kişinin URI'sini hem de küçük resmiQuickContactBadge
öğesine bağlayabilmek için bu yöntemi geçersiz kılmanız gerekir. Varsayılan uygulama, yalnızca bir sütun ileView
arasında bire bir eşlemeye izin verir.
Aşağıdaki kod snippet'i, CursorAdapter
özel alt sınıfının bir örneğini içermektedir:
Özel liste bağdaştırıcısını tanımlama
Oluşturucuyu dahil olmak üzere CursorAdapter
alt sınıfını tanımlayıp newView()
ve bindView()
öğelerini geçersiz kılın:
Kotlin
/** * Defines a class that holds resource IDs of each item layout * row to prevent having to look them up each time data is * bound to a row */ private data class ViewHolder( internal var displayname: TextView? = null, internal var quickcontact: QuickContactBadge? = null ) /** * * */ private inner class ContactsAdapter( context: Context, val inflater: LayoutInflater = LayoutInflater.from(context) ) : CursorAdapter(context, null, 0) { ... override fun newView( context: Context, cursor: Cursor, viewGroup: ViewGroup ): View { /* Inflates the item layout. Stores view references * in a ViewHolder class to prevent having to look * them up each time bindView() is called. */ return ContactListLayoutBinding.inflate(inflater, viewGroup, false).also { binding -> view.tag = ViewHolder().apply { displayname = binding.displayname quickcontact = binding.quickcontact } }.root } ... override fun bindView(view: View?, context: Context?, cursor: Cursor?) { (view?.tag as? ViewHolder)?.also { holder -> cursor?.apply { ... // Sets the display name in the layout holder.displayname?.text = getString(displayNameIndex) ... /* * Generates a contact URI for the QuickContactBadge */ ContactsContract.Contacts.getLookupUri( getLong(idIndex), cursor.getString(lookupKeyIndex) ).also { contactUri -> holder.quickcontact?.assignContactUri(contactUri) } getString(photoDataIndex)?.also {photoData -> /* * Decodes the thumbnail file to a Bitmap. * The method loadContactPhotoThumbnail() is defined * in the section "Set the contact URI and thumbnail." */ loadContactPhotoThumbnail(photoData)?.also { thumbnailBitmap -> /* * Sets the image in the QuickContactBadge. * QuickContactBadge inherits from ImageView. */ holder.quickcontact?.setImageBitmap(thumbnailBitmap) } } } } } }
Java
private class ContactsAdapter extends CursorAdapter { private LayoutInflater inflater; ... public ContactsAdapter(Context context) { super(context, null, 0); /* * Gets an inflater that can instantiate * the ListView layout from the file */ inflater = LayoutInflater.from(context); ... } ... /** * Defines a class that holds resource IDs of each item layout * row to prevent having to look them up each time data is * bound to a row */ private class ViewHolder { TextView displayname; QuickContactBadge quickcontact; } ... @Override public View newView( Context context, Cursor cursor, ViewGroup viewGroup) { /* Inflates the item layout. Stores view references * in a ViewHolder class to prevent having to look * them up each time bindView() is called. */ final ContactListLayoutBinding binding = ContactListLayoutBinding.inflate(inflater, viewGroup, false); final ViewHolder holder = new ViewHolder(); holder.displayname = binding.displayName; holder.quickcontact = binding.quickContact; view.setTag(holder); return binding.root; } ... @Override public void bindView( View view, Context context, Cursor cursor) { final ViewHolder holder = (ViewHolder) view.getTag(); final String photoData = cursor.getString(photoDataIndex); final String displayName = cursor.getString(displayNameIndex); ... // Sets the display name in the layout holder.displayname = cursor.getString(displayNameIndex); ... /* * Generates a contact URI for the QuickContactBadge */ final Uri contactUri = Contacts.getLookupUri( cursor.getLong(idIndex), cursor.getString(lookupKeyIndex)); holder.quickcontact.assignContactUri(contactUri); String photoData = cursor.getString(photoDataIndex); /* * Decodes the thumbnail file to a Bitmap. * The method loadContactPhotoThumbnail() is defined * in the section "Set the contact URI and thumbnail." */ Bitmap thumbnailBitmap = loadContactPhotoThumbnail(photoData); /* * Sets the image in the QuickContactBadge. * QuickContactBadge inherits from ImageView. */ holder.quickcontact.setImageBitmap(thumbnailBitmap); }
Değişkenleri ayarlama
Kodunuzda, aşağıdaki örnekte gösterildiği gibi, gerekli sütunları içeren bir Cursor
projeksiyonu içeren değişkenler ayarlayın.
Not: Aşağıdaki kod snippet'leri, Kişi URI'sini ve küçük resmi ayarlama bölümünde tanımlanan loadContactPhotoThumbnail()
yöntemini kullanır.
Kotlin
/* * Defines a projection based on platform version. This ensures * that you retrieve the correct columns. */ private val PROJECTION: Array<out String> = arrayOf( ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY, if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ContactsContract.Contacts.DISPLAY_NAME_PRIMARY } else { ContactsContract.Contacts.DISPLAY_NAME }, if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ContactsContract.Contacts.PHOTO_FILE_ID } else { /* * Although it's not necessary to include the * column twice, this keeps the number of * columns the same regardless of version */ ContactsContract.Contacts._ID } ) ... class ContactsFragment : Fragment(), LoaderManager.LoaderCallbacks<Cursor> { ... // Defines a ListView private val listView: ListView? = null // Defines a ContactsAdapter private val adapter: ContactsAdapter? = null ... // Defines a Cursor to contain the retrieved data private val cursor: Cursor? = null /* * As a shortcut, defines constants for the * column indexes in the Cursor. The index is * 0-based and always matches the column order * in the projection. */ // Column index of the _ID column private val idIndex = 0 // Column index of the LOOKUP_KEY column private val lookupKeyIndex = 1 // Column index of the display name column private val displayNameIndex = 3 /* * Column index of the photo data column. * It's PHOTO_THUMBNAIL_URI for Honeycomb and later, * and _ID for previous versions. */ private val photoDataIndex: Int = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 3 else 0 ...
Java
public class ContactsFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { ... // Defines a ListView private ListView listView; // Defines a ContactsAdapter private ContactsAdapter adapter; ... // Defines a Cursor to contain the retrieved data private Cursor cursor; /* * Defines a projection based on platform version. This ensures * that you retrieve the correct columns. */ private static final String[] PROJECTION = { ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY, (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) ? ContactsContract.Contacts.DISPLAY_NAME_PRIMARY : ContactsContract.Contacts.DISPLAY_NAME (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) ? ContactsContract.Contacts.PHOTO_FILE_ID : /* * Although it's not necessary to include the * column twice, this keeps the number of * columns the same regardless of version */ ContactsContract.Contacts._ID }; /* * As a shortcut, defines constants for the * column indexes in the Cursor. The index is * 0-based and always matches the column order * in the projection. */ // Column index of the _ID column private int idIndex = 0; // Column index of the LOOKUP_KEY column private int lookupKeyIndex = 1; // Column index of the display name column private int displayNameIndex = 3; /* * Column index of the photo data column. * It's PHOTO_THUMBNAIL_URI for Honeycomb and later, * and _ID for previous versions. */ private int photoDataIndex = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 3 : 0; ...
ListView'u ayarlama
Fragment.onCreate()
ürününde özel imleç bağdaştırıcısını örnekleyin ve ListView
öğesini alın:
Kotlin
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { return FragmentListViewBinding.inflate(...).let { binding -> ... /* * Gets a handle to the ListView in the file * contact_list_layout.xml */ listView = binding.contactList mAdapter?.also { listView?.adapter = it } ... }.root } ...
Java
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { FragmentListViewBinding binding = FragmentListViewBinding.inflate(...) ... /* * Gets a handle to the ListView in the file * contact_list_layout.xml */ if (binding.contactListView != null && adapter != null) { binding.contactListView.setAdapter(adapter); } ... } ...
onViewCreated()
içinde ContactsAdapter
öğesini ListView
öğesine bağlayın:
Kotlin
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) /* * Instantiates the subclass of * CursorAdapter */ mAdapter = activity?.let { ContactsAdapter(it).also { adapter -> // Sets up the adapter for the ListView listView?.adapter = adapter } } }
Java
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { ... /* * Instantiates the subclass of * CursorAdapter */ mAdapter = new ContactsAdapter(getActivity()); // Sets up the adapter for the ListView if (listView != null && mAdapter != null) { listView.setAdapter(mAdapter); } ... } ...
Kişi verilerini içeren bir Cursor
geri aldığınızda (genellikle onLoadFinished()
içinde), Cursor
verilerini ListView
öğesine taşımak için swapCursor()
numaralı telefonu arayın. Bu, kişi listesindeki her bir giriş için QuickContactBadge
bilgisini görüntüler.
Kotlin
override fun onLoadFinished(loader: Loader<Cursor>, cursor: Cursor) { // When the loader has completed, swap the cursor into the adapter mAdapter?.swapCursor(cursor) }
Java
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { // When the loader has completed, swap the cursor into the adapter mAdapter.swapCursor(cursor); }
Bir Cursor
öğesini CursorAdapter
(veya alt sınıfı) içeren bir ListView
öğesine bağlayıp Cursor
öğesini yüklemek için CursorLoader
kullandığınızda, onLoaderReset()
uygulamanızda her zaman Cursor
referansını temizleyin.
Bu, aşağıdaki örnekte gösterilmiştir:
Kotlin
override fun onLoaderReset(loader: Loader<Cursor>) { // Removes remaining reference to the previous Cursor adapter?.swapCursor(null) }
Java
@Override public void onLoaderReset(Loader<Cursor> loader) { // Removes remaining reference to the previous Cursor adapter.swapCursor(null); }