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();