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

时间:2015-11-07 23:03:36

标签: android android-studio android-recyclerview

这是我初次化我的回收商

的方式
        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&#34;适配器中看到的那样,#34;出现了很多。图像也会重新加载,它们会空白一秒钟然后重新加载。

1 个答案:

答案 0 :(得分:1)

我担心这是RecyclerView的正常行为。它通过仅在内存中保存显示的项目来优化内存使用,并在显示时使用onBindViewHolder方法中指定的内容更新内存使用情况,如果要加载预先缓存的数据和资源,则通常无缝地进行更新。

这里发生的是你有这条线:

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

在你的onBindViewHolder操作中,所以每次RecyclerView中的项进入视图时,都会再次调用它。实际上并不是在RecyclerView上重新设置适配器,而是将数据重新加载到特定的视图中。

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