0
目标:我想在RecyclerView中更改我的progressBar's
可见性,以指示当用户添加具有addImage()
的图像时,图像正在加载。在RecyclerView中更改视图的状态
问题:addImage
应该改变progressBar's
的可见性。但是,当调用addImage()
时,不会创建查看者,因此progressBar
未定义。
MainActivity:
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);
recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setAdapter(galleryAdapter);
if (getArguments() != null) {
if (getArguments().containsKey(PhotoFragment.IMAGE_URI)) {
final Uri imageUri = Uri.parse(getArguments().getString(PhotoFragment.IMAGE_URI));
galleryAdapter.addImage(imageUri);
galleryAdapter.notifyDataSetChanged();
getArguments().remove(PhotoFragment.IMAGE_URI);
}
}
RecyclerView(其中问题所在):
public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.GalleryViewHolder> {
ArrayList<Uri> imageUriArrayList = new ArrayList<>();
File[] listFile;
ProgressBar progressBar;
private GalleryFragment mFragment;
private String airBnbDirectory = "/Airbnb";
SharedPreferences sharedPreferences;
SharedPreferences.Editor edit;
public GalleryAdapter(GalleryFragment fragment) {
mFragment = fragment;
loadSDCard();
}
public void addImage(final Uri imageUri) {
imageUriArrayList.add(imageUri);
//Save image in SD CARD(External Storage)
new AsyncTask<Void, Void, Void>() {
//
String imageUriForLoadingSP;
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d("adapter", "OnPreExecute");
progressBar.setVisibility(View.VISIBLE);
//Cannot get progressBar because it's not created by the ViewHolder yet.
}
@Override
protected Void doInBackground(Void... params) {
imageUriForLoadingSP = saveInSDCard(imageUri);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.d("mattSaving", "onPostExecute");
progressBar.setVisibility(View.GONE);
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
}
}
@Override
public GalleryAdapter.GalleryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.gallery_adapter_item, parent, false);
return new GalleryAdapter.GalleryViewHolder(view);
}
@Override
public void onBindViewHolder(GalleryAdapter.GalleryViewHolder holder, int position) {
holder.bindView(position);
}
@Override
public int getItemCount() {
return imageUriArrayList.size();
}
public class GalleryViewHolder extends RecyclerView.ViewHolder {
ImageView ivPhoto;
public GalleryViewHolder(View itemView) {
super(itemView);
Log.d("adapter", "ViewHolder");
ivPhoto = (ImageView) itemView.findViewById(R.id.ivPhoto);
progressBar = (ProgressBar) itemView.findViewById(R.id.progressBar);
}
public void bindView(final int position) {
//load images called by addImage()
Glide.with(mFragment)
.load(imageUriArrayList.get(position)) // Uri of the picture
.into(ivPhoto);
}
}
}
谢谢,但我会坚持学习目的的progressBar理念。任何想法如何解决这个问题,而无需删除progressBar? –
答复已更新。 – Bryan
我现在可以调用progressBar而不会出现空指针异常!但progressBar剂量似乎出现在我添加的最新图像上。相反,它出现在以前保存的图像中,为什么会有线索? –