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劑量似乎出現在我添加的最新圖像上。相反,它出現在以前保存的圖像中,爲什麼會有線索? –