Android recyclerview适配器notifydatasetchanged不工作

Android recyclerview适配器notifydatasetchanged不工作,android,Android,当我只使用imageRecycleServiceAdapter.notifyDataSetChanged()时它无论如何都不起作用 imageRecyclerViewAdapter = new ImageRecyclerViewAdapter(MainActivity.this,imagesList); recyclerView.setAdapter(imageRecyclerViewAdapter); 如果我这样做了,那就是工作 那我该怎么办呢 我的代码如下 public class Ima

当我只使用
imageRecycleServiceAdapter.notifyDataSetChanged()时它无论如何都不起作用

imageRecyclerViewAdapter = new ImageRecyclerViewAdapter(MainActivity.this,imagesList);
recyclerView.setAdapter(imageRecyclerViewAdapter);
如果我这样做了,那就是工作

那我该怎么办呢

我的代码如下

public class ImageRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{


public static final int TYPE_ITEM = 0;
public static final int TYPE_FOOTER = 1;
private boolean hasFooter;//设置是否显示Footer
private boolean hasMoreData;//设置是否可以继续加载数据
private List<ImageFuli> images;
private Context context;

public ImageRecyclerViewAdapter(Context context, List<ImageFuli> images) {
    this.images = images;
    this.context = context;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if(viewType == TYPE_FOOTER){//底部 加载view
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.footer_progress, parent, false);
        return new FooterViewHolder(view);
    } else {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_list, null);
        ImageViewHolder ivh = new ImageViewHolder(layoutView);
        return ivh;
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if(holder instanceof FooterViewHolder) {
        if(hasMoreData){
            ((FooterViewHolder) holder).mProgressView.setVisibility(View.VISIBLE);
        } else {
            ((FooterViewHolder) holder).mProgressView.setVisibility(View.GONE);
        }
    } else {
        ImageViewHolder imageViewHolder = (ImageViewHolder) holder;
        ImageFuli imageFuli= images.get(position);
        imageViewHolder.imageView.setOriginalSize(imageFuli.getWidth(), imageFuli.getHeight());
        Glide.with(context)
                .load(imageFuli.getUrl())
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageViewHolder.imageView);
        ViewCompat.setTransitionName(imageViewHolder.imageView,imageFuli.getUrl());
    }

}

@Override
public int getItemCount() {
    return this.images.size() + (hasFooter ? 1 : 0);
}

@Override
public int getItemViewType(int position) {

    if (position == getBasicItemCount() && hasFooter) {
        return TYPE_FOOTER;
    }
    return TYPE_ITEM;//0
}

private int getBasicItemCount() {
    return images.size();
}

public boolean hasFooter() {
    return hasFooter;
}

public void setHasFooter(boolean hasFooter) {
    if(this.hasFooter != hasFooter) {
        this.hasFooter = hasFooter;
        notifyDataSetChanged();
    }
}


public boolean hasMoreData() {
    return hasMoreData;
}

public void setHasMoreData(boolean isMoreData) {
    if(this.hasMoreData != isMoreData) {
        this.hasMoreData = isMoreData;
        notifyDataSetChanged();
    }
}
public void setHasMoreDataAndFooter(boolean hasMoreData, boolean hasFooter) {
    if(this.hasMoreData != hasMoreData || this.hasFooter != hasFooter) {
        this.hasMoreData = hasMoreData;
        this.hasFooter = hasFooter;
        notifyDataSetChanged();
    }
}


public  class ImageViewHolder extends RecyclerView.ViewHolder {
    private RatioImageView imageView;
    public ImageViewHolder(View itemView) {
        super(itemView);
        imageView = (RatioImageView) itemView.findViewById(R.id.image);
    }
}
public  class FooterViewHolder extends RecyclerView.ViewHolder {
    public final View mProgressView;

    public FooterViewHolder(View view) {
        super(view);
        mProgressView = View.inflate(context,R.layout.footer_progress, null);
    }
}
公共类ImageRecycleServiceAdapter扩展了RecycleView.Adapter{
公共静态最终整数类型\u项=0;
公共静态final int TYPE_FOOTER=1;
私有布尔hasFooter//设置是否显示页脚
私有布尔数据//设置是否可以继续加载数据
私有列表图像;
私人语境;
公共ImageRecycleServiceAdapter(上下文、列表图像){
这个。图像=图像;
this.context=上下文;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
if(viewType==类型\页脚){//底部 加载看法
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.footer\u进度,父项,false);
返回新的FooterViewHolder(视图);
}否则{
View layoutView=LayoutFlater.from(parent.getContext()).flate(R.layout.image\u列表,null);
ImageViewHolder ivh=新的ImageViewHolder(布局视图);
返回ivh;
}
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
if(FooterViewHolder的保持架实例){
如果(hasMoreData){
((FooterViewHolder)holder.mProgressView.setVisibility(View.VISIBLE);
}否则{
((FooterViewHolder)holder.mProgressView.setVisibility(View.GONE);
}
}否则{
ImageViewHolder ImageViewHolder=(ImageViewHolder)holder;
ImageFuli ImageFuli=images.get(位置);
imageViewHolder.imageView.setOriginalSize(imageFuli.getWidth(),imageFuli.getHeight());
带(上下文)滑动
.load(imageFuli.getUrl())
.diskCacheStrategy(diskCacheStrategy.ALL)
.into(imageViewHolder.imageView);
ViewCompat.setTransitionName(imageViewHolder.imageView,imageFuli.getUrl());
}
}
@凌驾
public int getItemCount(){
返回此.images.size()+(hasFooter?1:0);
}
@凌驾
public int getItemViewType(int位置){
if(position==getBasicItemCount()&&hasFooter){
返回类型\页脚;
}
返回类型_ITEM;//0
}
私有int getBasicItemCount(){
返回图像。size();
}
公共布尔hasFooter(){
返回hasFooter;
}
公共void setHasFooter(布尔hasFooter){
if(this.hasFooter!=hasFooter){
this.hasFooter=hasFooter;
notifyDataSetChanged();
}
}
公共布尔值hasMoreData(){
返回hasMoreData;
}
public void setHasMoreData(布尔isMoreData){
if(this.hasMoreData!=isMoreData){
this.hasMoreData=isMoreData;
notifyDataSetChanged();
}
}
public void setHasMoreDataAndFooter(布尔hasMoreData,布尔hasFooter){
if(this.hasMoreData!=hasMoreData | | this.hasFooter!=hasFooter){
this.hasMoreData=hasMoreData;
this.hasFooter=hasFooter;
notifyDataSetChanged();
}
}
公共类ImageViewHolder扩展了RecyclerView.ViewHolder{
私有比率图像视图图像视图;
公共图像视图持有者(视图项视图){
超级(项目视图);
imageView=(RatioImageView)itemView.findViewById(R.id.image);
}
}
公共类FooterViewHolder扩展了RecyclerView.ViewHolder{
公共最终视图mProgressView;
公共页脚视图持有者(视图){
超级(视图);
mProgressView=View.inflate(上下文,R.layout.footer\u进度,null);
}
}
}

主要活动是什么

  public class MainActivity extends AppCompatActivity {

private StaggeredGridLayoutManager gaggeredGridLayoutManager;
private List<ImageFuli> imagesList = new ArrayList<ImageFuli>();
private ImageRecyclerViewAdapter imageRecyclerViewAdapter;
private RecyclerView recyclerView;
private SwipeRefreshLayout swipeRefreshLayout;
private boolean onLoading = false;
private int loadImageCount = 15;
private int loadTimes=1;

@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    init();

    getImagesDataFromHttp();

}

private void init() {
    recyclerView = (RecyclerView)findViewById(R.id.content);
    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresher);
    swipeRefreshLayout.setColorSchemeColors(R.color.colorPrimary);

    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            getImagesDataFromHttp();
        }
    });

    recyclerView.setHasFixedSize(true);

    imageRecyclerViewAdapter = new ImageRecyclerViewAdapter(MainActivity.this, imagesList);
    recyclerView.setAdapter(imageRecyclerViewAdapter);
    gaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1);
    recyclerView.setLayoutManager(gaggeredGridLayoutManager);

    swipeRefreshLayout.post(new Runnable() {
        @Override
        public void run() {
            swipeRefreshLayout.setRefreshing(true);
        }
    });
}

private void getImagesDataFromHttp() {
    HttpUtil.httpRequestToGank(ApiUrl.gankApiUrl+(loadImageCount+5*loadTimes)+"/1" , new HttpUtil.HttpUtilCallBack() {
        @Override
        public void onFinsh(String response) {
            try {
                imagesList = ResponseHandleUtil.HandleResponseFromHttp(response, MainActivity.this);
                loadTimes++;
            } catch (ExecutionException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
//                        imageRecyclerViewAdapter = new ImageRecyclerViewAdapter(MainActivity.this, imagesList);
//                        recyclerView.setAdapter(imageRecyclerViewAdapter);
                    //imageRecyclerViewAdapter.notifyDataSetChanged();
                    recyclerView.getAdapter().notifyDataSetChanged();
                    imageRecyclerViewAdapter.setHasFooter(false);

                    if (swipeRefreshLayout.isRefreshing()) {
                        swipeRefreshLayout.setRefreshing(false);
                    }
                }
            });

        }

        @Override
        public void onError(Exception e) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "加载失败!", Toast.LENGTH_SHORT).show();
                    if (swipeRefreshLayout.isRefreshing()) {
                        swipeRefreshLayout.setRefreshing(false);
                    }
                }
            });

        }
    });

}
public类MainActivity扩展了AppCompatActivity{
私人参差不齐的RidGridLayoutManager gaggeredGridLayoutManager;
private List imagesList=new ArrayList();
私有ImageRecycleServiceAdapter ImageRecycleServiceAdapter;
私人回收站;
私人SwipeRefreshLayout SwipeRefreshLayout;
私有布尔onload=false;
私有int loadImageCount=15;
私有整数加载时间=1;
@TargetApi(Build.VERSION\u CODES.M)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
getImagesDataFromHttp();
}
私有void init(){
recyclerView=(recyclerView)findViewById(R.id.content);
swipeRefreshLayout=(swipeRefreshLayout)findViewById(R.id.refresher);
swipeRefreshLayout.setColorSchemeColors(R.color.colorPrimary);
swipeRefreshLayout.setOnRefreshListener(新的swipeRefreshLayout.OnRefreshListener()){
@凌驾
公共void onRefresh(){
getImagesDataFromHttp();
}
});
recyclerView.setHasFixedSize(true);
ImageRecycleServiceAdapter=新的ImageRecycleServiceAdapter(MainActivity.this,imagesList);
setAdapter(ImageRecycleServiceAdapter);
gaggeredGridLayoutManager=新的交错边ridlayoutmanager(2,1);
recyclerView.setLayoutManager(gaggeredGridLayoutManager);
swipeRefreshLayout.post(新的Runnable(){
@凌驾
公开募捐{
swipeRefreshLayout.setRefreshing(true);
}
});
}
私有void getImagesDataFromHttp(){
HttpUtil.httprequesttobank(apirl.gankApiUrl+(loadImageCount+5*loadTimes)+“/1”,新的HttpUtil.HttpUtilCallBack(){
@凌驾
公共void onFinsh(字符串响应){
试一试{
imagesList=ResponseHandleUtil.HandleResponseFromHttp(响应,MainActivity.this);
loadTimes++;
}捕获(执行例外){
e、 printStackTrace();
}捕捉(中断异常e){
e、 printStackTrace();
}
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
//ImageRecycleServiceAdapter=新的ImageRecycleServiceAdapter(MainActivity.this,imagesList);
//recyclerView.setAdapter(图
mRecyclerView.getAdapter().notifyDataSetChanged();