gpt4 book ai didi

android - 每次滚动时 RecyclerAdapter 都会重新加载项目 - Android Studio

转载 作者:行者123 更新时间:2023-11-30 01:46:58 24 4
gpt4 key购买 nike

这就是我初始化回收器的方式

        mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);

final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());

mRecyclerView.setLayoutManager(linearLayoutManager);

这是我的适配器:

    public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerHolder> {

private List<MyRecyclerItems> recyclerItemsList;
private Context mContext;
private ImageLoader mImageLoader;
private int focusedItem = 0;

public MyRecyclerAdapter(Context context, List<MyRecyclerItems> listItemsList, ImageLoader imageLoader){
this.recyclerItemsList = listItemsList;
this.mContext = context;
this.mImageLoader = imageLoader;
}

@Override
public MyRecyclerHolder onCreateViewHolder(final ViewGroup viewGroup, final int position){
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_items, null);
MyRecyclerHolder holder = new MyRecyclerHolder(v);

holder.recyclerLayout.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// TextView redditUrl = (TextView) v.findViewById(R.id.url);
// String postUrl = redditUrl.getText().toString();
// Intent intent = new Intent(mContext, WebViewActivity.class);
// intent.putExtra("url", postUrl);
// mContext.startActivity(intent);
}
});

return holder;
}

@Override
public void onBindViewHolder(final MyRecyclerHolder holder, int position) {


MyRecyclerItems listItems = recyclerItemsList.get(position);
holder.itemView.setSelected(focusedItem == position);

holder.getLayoutPosition();
Log.d("adapter", "adapter called");

holder.photo.setImageUrl(listItems.getImagePath(),mImageLoader);
holder.email.setText(listItems.getEmail());
holder.about.setText(listItems.getAbout());

}

public void clearAdapter(){
recyclerItemsList.clear();
notifyDataSetChanged();
}

@Override
public int getItemCount(){
return (null != recyclerItemsList ? recyclerItemsList.size() : 0);
}
}

这就是我的 logCat 的样子:

    11-07 22:57:30.683 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:32.393 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:32.923 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:33.073 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:33.233 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:33.233 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:33.243 22517-22805/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:33.243 22517-22805/name.company.newapp I/qtaguid: Tagging socket 43 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:33.243 22517-22805/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:33.243 22517-22805/name.company.newapp I/qtaguid: Tagging socket 31 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:33.243 22517-22805/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:33.243 22517-22805/name.company.newapp I/qtaguid: Tagging socket 42 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:33.243 22517-22805/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:33.253 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:33.263 22517-22805/name.company.newapp I/System.out: KnoxVpnUidStorageknoxVpnSupported API value returned is false
11-07 22:57:33.263 22517-22805/name.company.newapp I/qtaguid: Tagging socket 31 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:33.273 22517-22803/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:33.273 22517-22803/name.company.newapp I/System.out: KnoxVpnUidStorageknoxVpnSupported API value returned is false
11-07 22:57:33.273 22517-22803/name.company.newapp I/qtaguid: Tagging socket 42 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:33.373 22517-22803/name.company.newapp I/qtaguid: Untagging socket 42
11-07 22:57:33.623 22517-22805/name.company.newapp I/qtaguid: Untagging socket 31
11-07 22:57:33.883 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:34.403 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:34.583 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:35.143 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:35.653 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:36.093 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:37.173 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:37.463 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:38.253 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:38.413 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:38.433 22517-22804/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:38.433 22517-22804/name.company.newapp I/qtaguid: Tagging socket 42 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:38.433 22517-22804/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:38.433 22517-22804/name.company.newapp I/qtaguid: Tagging socket 31 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:38.883 22517-22804/name.company.newapp I/qtaguid: Untagging socket 31
11-07 22:57:38.963 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:39.993 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:40.483 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:40.483 22517-22802/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:40.483 22517-22802/name.company.newapp I/qtaguid: Tagging socket 31 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:40.503 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:40.503 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:40.503 22517-22803/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:40.503 22517-22805/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:40.513 22517-22803/name.company.newapp I/System.out: KnoxVpnUidStorageknoxVpnSupported API value returned is false
11-07 22:57:40.513 22517-22803/name.company.newapp I/qtaguid: Tagging socket 42 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:40.513 22517-22805/name.company.newapp I/System.out: KnoxVpnUidStorageknoxVpnSupported API value returned is false
11-07 22:57:40.513 22517-22805/name.company.newapp I/qtaguid: Tagging socket 46 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:40.713 22517-22803/name.company.newapp I/qtaguid: Untagging socket 42
11-07 22:57:40.753 22517-22805/name.company.newapp I/qtaguid: Untagging socket 46
11-07 22:57:40.763 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:40.883 22517-22802/name.company.newapp I/qtaguid: Untagging socket 31
11-07 22:57:41.563 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:43.713 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:43.833 22517-22517/name.company.newapp D/adapter: Adapter called
11-07 22:57:43.843 22517-22804/name.company.newapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
11-07 22:57:43.843 22517-22804/name.company.newapp I/qtaguid: Tagging socket 42 with tag a72673b100000000{2804315057,0} uid -1, pid: 22517, getuid(): 10804
11-07 22:57:43.893 22517-22804/name.company.newapp I/qtaguid: Untagging socket 42
11-07 22:57:44.233 22517-22517/name.company.newapp D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-07 22:57:45.653 22517-22517/name.company.newapp V/ActivityThread: updateVisibility : ActivityRecord{22636519 token=android.os.BinderProxy@1f8bf54f {name.company.newapp/name.company.newapp.Recycler.RecyclerView}} show : true

这是正常行为吗?正如您从 logcat 中看到的那样,“Adapter called”出现了很多次。图像也被重新加载,它们会空白一秒钟然后重新加载。

最佳答案

恐怕这是 RecyclerView 的正常行为。它通过仅将显示的项目保留在内存中来优化内存使用,并在显示时使用 onBindViewHolder 方法中分配的内容更新它们,如果您正在加载预缓存的数据和资源,通常会无缝地进行更新。

这里发生的是你有一行:

Log.d("adapter", "adapter called");

在您的 onBindViewHolder 操作中,因此每次您的 RecyclerView 中的项目出现时,都会再次调用它。实际上并不是在 RecyclerView 上重新设置适配器,而是将数据重新加载到特定的查看器中。

您看到的图像重新加载是因为您丢弃了图像,然后在每次 ViewHolder 离开屏幕后在屏幕上滚动/更新/显示时重新加载它们。一个更好的方法是将所有图像加载到 LruCache 中,这是通用图像加载器 does if you switch it on .

关于android - 每次滚动时 RecyclerAdapter 都会重新加载项目 - Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33588844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com