У меня есть адаптер представления Recycler, который работает.Он просто перечисляет некоторые контакты из уже созданного списка.Дело в том, что ... на их перечисление (или раздувание?) Уходит вечностьПриложение зависает на несколько секунд.Это происходит с телефонами, которые имеют более 600 контактов.Я думал, что это просто ограничения аппаратного обеспечения телефона, но я не испытываю никаких задержек при переходе на собственный список контактов телефона.Тот загружается в долях секунды и является гладким.Я просто мог бы сделать что-то не так здесь.
class ContactAdapter extends RecyclerView.Adapter {
private final int TYPE_NO_RESULTS = 0;
private final int TYPE_ITEM_AFFILIATED = 2;
private final int TYPE_ITEM_NONAFFILIATED = 4;
private List<ContactData> contacts;
public ContactAdapter(List<ContactData> contacts) {
this.contacts = contacts;
}
@Override
public int getItemViewType(int position) {
if (contacts.size()>0){
return controller.isSelectedAffiliated() ? TYPE_ITEM_AFFILIATED : TYPE_ITEM_NONAFFILIATED;
}
return TYPE_NO_RESULTS;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
RecyclerView.ViewHolder viewHolder = null;
if (viewType == TYPE_ITEM_AFFILIATED || viewType == TYPE_ITEM_NONAFFILIATED){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_luka_contact_item, parent, false);
viewHolder = new ItemViewHolder(view);
} else if (viewType == TYPE_NO_RESULTS){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_transfer_contact_empty, parent, false);
viewHolder = new NoResultsHolder(view);
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
final int type = getItemViewType(position);
if (type == TYPE_ITEM_AFFILIATED || type == TYPE_ITEM_NONAFFILIATED){
final ContactData data = getContactInfo(position);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (controller.isSelectedAffiliated()) {
if (position<=contacts.size()){
mOnItemSelected.onContactSelected(data);
}
}
}
});
((ItemViewHolder)holder).titleView.setText(data.name);
if (data.url!=null){
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(LukaContactsFragment.this.getContext().getContentResolver(), Uri.parse(data.url));
RoundedBitmapDrawable imageDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
imageDrawable.setCircular(true);
((ItemViewHolder)holder).imageView.setImageDrawable(imageDrawable);
} catch (IOException e) {
((ItemViewHolder)holder).imageView.setImageBitmap(defaultImage);
}
} else {
((ItemViewHolder)holder).imageView.setImageBitmap(defaultImage);
}
((ItemViewHolder) holder).inviteText.setVisibility(View.GONE);
((ItemViewHolder) holder).separator.setVisibility(position == contacts.size() || position== getItemCount()?View.INVISIBLE:View.VISIBLE);
} else {
((NoResultsHolder)holder).titleView.setText(getString(R.string.phone_transfer_contacts_no_results_header));
}
}
@Override
public int getItemCount() {
int count = 0;
if (contacts.size()>0){
count = contacts.size();
}
if (count== 0){
count = 1;
}
return count;
}
private ContactData getContactInfo(int position) {
return contacts.get(position);
}
}
РЕДАКТИРОВАТЬ: Добавление XML
<LinearLayout
android:id="@+id/listLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dimen_8"
android:layout_marginStart="@dimen/dimen_6"
android:layout_marginEnd="@dimen/dimen_6"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>