Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AsyncListUtil在刷新后保留旧数据_Android_Android Recyclerview_Android Support Library - Fatal编程技术网

Android AsyncListUtil在刷新后保留旧数据

Android AsyncListUtil在刷新后保留旧数据,android,android-recyclerview,android-support-library,Android,Android Recyclerview,Android Support Library,我在后台使用AsyncListUtil从数据库加载项 如果磁贴大小为50,则AsyncListUtil在刷新()后不会清除缓存。循环视图显示旧列表中前6项,但应显示最后6项。瓷砖大小为5时就可以了 瓷砖尺寸有限制吗?还是我的代码有问题 下面是示例代码,它也有同样的问题 public class AsyncListUtilActivity extends AppCompatActivity { private static final String TAG = "AsyncListUtil

我在后台使用AsyncListUtil从数据库加载项

如果磁贴大小为50,则AsyncListUtil在
刷新()
后不会清除缓存。循环视图显示旧列表中前6项,但应显示最后6项。瓷砖大小为5时就可以了

瓷砖尺寸有限制吗?还是我的代码有问题

下面是示例代码,它也有同样的问题

public class AsyncListUtilActivity extends AppCompatActivity {
    private static final String TAG = "AsyncListUtilActivity";
    private RecyclerView mRecyclerView;
    private LinearLayoutManager mLinearLayoutManager;
    private List<String> textList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mRecyclerView = new RecyclerView(this);
        mLinearLayoutManager = new LinearLayoutManager(this);
        textList.addAll(Arrays.asList(Cheeses.sCheeseStrings));
        mRecyclerView.setLayoutManager(mLinearLayoutManager);
        mRecyclerView.setHasFixedSize(true);
        final ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        mRecyclerView.setLayoutParams(layoutParams);
        mRecyclerView.setAdapter(new AsyncAdapter(textList));
        setContentView(mRecyclerView);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuItemCompat.setShowAsAction(menu.add("Layout"), MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        List<String> tmpList = new ArrayList<>(6);
        for(int i = textList.size() - 1; i >= textList.size() - 6 ; --i) {
            tmpList.add(textList.get(i));
        }
        textList.clear();
        textList.addAll(tmpList);
        ((AsyncAdapter) mRecyclerView.getAdapter()).refresh();
        return super.onOptionsItemSelected(item);
    }
    private static class TextViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        public TextViewHolder(Context context) {
            super(new TextView(context));
            textView = (TextView) itemView;
        }
    }
    private class AsyncAdapter extends RecyclerView.Adapter<TextViewHolder> {
        private AsyncListUtil<String> mAsyncListUtil;
        AsyncAdapter(final List<String> textList) {
            mAsyncListUtil = new AsyncStringListUtil(textList);
        }
        @Override
        public TextViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new TextViewHolder(parent.getContext());
        }
        @Override
        public void onBindViewHolder(TextViewHolder holder, int position) {
            final String itemString = mAsyncListUtil.getItem(position);
            if (itemString == null) {
                holder.textView.setText("loading...");
            } else {
                holder.textView.setText(itemString);
            }
        }
        @Override
        public int getItemCount() {
            return mAsyncListUtil.getItemCount();
        }

        public void refresh() {
            mAsyncListUtil.refresh();
        }
    }
    private class AsyncStringListUtil extends AsyncListUtil<String> {
        private static final int TILE_SIZE = 50;
        private static final long DELAY_MS = 500;
        public AsyncStringListUtil(final List<String> textList) {
            super(String.class, TILE_SIZE,
                    new AsyncListUtil.DataCallback<String>() {
                        @Override
                        public int refreshData() {
                            return textList.size();
                        }
                        @Override
                        public void fillData(String[] data, int startPosition, int itemCount) {
                            sleep();
                            for (int i = 0; i < itemCount; i++) {
                                data[i] = textList.get(startPosition + i);
                            }
                        }
                        private void sleep() {
                            try {
                                Thread.sleep(DELAY_MS);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new AsyncListUtil.ViewCallback() {
                        @Override
                        public void getItemRangeInto(int[] outRange) {
                            outRange[0] = mLinearLayoutManager.findFirstVisibleItemPosition();
                            outRange[1] = mLinearLayoutManager.findLastVisibleItemPosition();
                        }
                        @Override
                        public void onDataRefresh() {
                            mRecyclerView.getAdapter().notifyDataSetChanged();
                        }
                        @Override
                        public void onItemLoaded(int position) {
                            mRecyclerView.getAdapter().notifyItemChanged(position);
                        }
                    });
            mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    onRangeChanged();
                }
            });
        }
    }
}
公共类AsyncListUtiactivity扩展了AppCompativity活动{
私有静态最终字符串标记=“AsyncListUtilActivity”;
私人回收视图mRecyclerView;
私人线路布局经理;
private List textList=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mRecyclerView=新的回收视图(本);
mLinearLayoutManager=新的LinearLayoutManager(此);
addAll(Arrays.asList(Cheeses.sCheeseStrings));
mRecyclerView.setLayoutManager(mLinearLayoutManager);
mRecyclerView.setHasFixedSize(true);
最终ViewGroup.LayoutParams LayoutParams=新建ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_父级,ViewGroup.LayoutParams.MATCH_父级);
mRecyclerView.setLayoutParams(layoutParams);
setAdapter(新的AsyncAdapter(textList));
setContentView(mRecyclerView);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
super.onCreateOptions菜单(菜单);
MenuItemCompat.setShowAsAction(menu.add(“布局”)、MenuItemCompat.SHOW\u AS\u ACTION\u IF\u ROOM);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
List tmpList=新的ArrayList(6);
对于(int i=textList.size()-1;i>=textList.size()-6;--i){
tmpList.add(textList.get(i));
}
textList.clear();
textList.addAll(tmpList);
((AsyncAdapter)mRecyclerView.getAdapter()).refresh();
返回super.onOptionsItemSelected(项目);
}
私有静态类TextViewHolder扩展了RecyclerView.ViewHolder{
文本视图文本视图;
公共文本视图持有者(上下文){
超级(新文本视图(上下文));
textView=(textView)项目视图;
}
}
私有类AsyncAdapter扩展了RecyclerView.Adapter{
私有AsyncListUtil mAsyncListUtil;
AsyncAdapter(最终列表文本列表){
mAsyncListUtil=新的AsyncStringListUtil(文本列表);
}
@凌驾
公共文本ViewHolder onCreateViewHolder(视图组父级,int-viewType){
返回新的TextViewHolder(parent.getContext());
}
@凌驾
BindViewHolder上的公共无效(TextViewHolder,int位置){
最终字符串itemString=mAsyncListUtil.getItem(位置);
if(itemString==null){
holder.textView.setText(“加载…”);
}否则{
holder.textView.setText(itemString);
}
}
@凌驾
public int getItemCount(){
返回mAsyncListUtil.getItemCount();
}
公共无效刷新(){
mAsyncListUtil.refresh();
}
}
私有类AsyncStringListUtil扩展了AsyncListUtil{
专用静态最终整块大小=50;
专用静态最终长延时_MS=500;
公共AsyncStringListUtil(最终列表文本列表){
超级(String.class、TILE\u尺寸、,
新的AsyncListUtil.DataCallback(){
@凌驾
公共整型刷新数据(){
返回textList.size();
}
@凌驾
公共void fillData(字符串[]数据,int startPosition,int itemCount){
睡眠();
对于(int i=0;i
您需要更新ItemSource。只需调用
itemSource.update()
before
listUtil.refresh()

您需要更新ItemSource。只需调用
itemSource.update()
before
listUtil.refresh()