남자들은 내 progressDialog에 약간의 문제가 있습니다. 올바른 방식으로 작동하지 않습니다. 글라이드를 사용하여 많은 그림을로드하기 때문에 내 progressDialog가 RecylerView 어댑터 안에 있습니다. Glide를 사용할 때 progressDialog를 표시하는 유일한 방법이었습니다. progressDialog를 Asynctask proExecute로 이동하고 postExecute는 doinBackground 작업이 수행 중이거나 숨겨져있을 때만 표시됩니다. 그러나 Glide는 여전히 사진을로드 중입니다. 필자가 작성한 것처럼, 어댑터에 넣고 그림이로드 될 때까지 숨겨진 솔루션이 이상하게 작동합니다. 때때로 나는 앱을 실행할 때 progressdialog없이 사진을로드 할 때까지 기다려야하며 때로는 짧은 시간 동안 보여야합니다. 그것을 해결하는 방법? 내 상황에서 progressDialog를 사용하는 가장 좋은 방법은 무엇입니까?Asynctask 및 RecyclerView 어댑터 안드로이드 ProgressDialog
내 MainActivity :
public class MainActivity extends AppCompatActivity {
List<String> shopsNames;
ArrayList<RowModel> rowModels;
public Realm mRealm;
@BindView(R.id.toolbar_layout)
CollapsingToolbarLayout toolbarLayout;
@BindView(R.id.app_bar)
AppBarLayout appBar;
private ShopsAdapter adapter;
@BindView(R.id.recycler_view)
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
ButterKnife.bind(this);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ConnectionDetector connectionDetector = new ConnectionDetector(this);
if (!connectionDetector.isConnection()) {
finish();
}
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 123);
rowModels = new ArrayList<>();
shopsNames = new ArrayList<>();
Realm.init(this);
mRealm = Realm.getDefaultInstance();
initCollapsingToolbar();
Glide.with(getApplicationContext()).load(R.drawable.shoplogo).
into((ImageView) findViewById(R.id.backdrop));
adapter = new ShopsAdapter(MainActivity.this, shopsNames);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 2);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
AsyncTaskRetro asyncTaskRetro = new AsyncTaskRetro();
asyncTaskRetro.execute();
}
private class AsyncTaskRetro extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
PlacesAPI.Factory.getInstance().getPlaces().enqueue(new Callback<Places>() {
@Override
public void onResponse(Call<Places> call, Response<Places> response) {
for (int i = 0; i < response.body().getPosts().size(); i++) {
RowModel rowModel = new RowModel(response.body().getPosts().get(i).getNazwa(),
Double.parseDouble(response.body().getPosts().get(i).getSzer()),
Double.parseDouble(response.body().getPosts().get(i).getDlug()));
rowModels.add(rowModel);
}
String oldName;
oldName = rowModels.get(0).getName();
shopsNames.add(rowModels.get(0).getName());
mRealm.beginTransaction();
mRealm.copyToRealm(rowModels);
mRealm.commitTransaction();
for (int j = 0; j < rowModels.size(); j++) {
if (rowModels.get(j).getName().equals(oldName)) {
continue;
}
oldName = rowModels.get(j).getName();
shopsNames.add(rowModels.get(j).getName());
}
//sortowanie listy z nazwami sklepow
Collections.sort(shopsNames);
adapter = new ShopsAdapter(MainActivity.this, shopsNames);
recyclerView.setAdapter(adapter);
}
@Override
public void onFailure(Call<Places> call, Throwable t) {
}
});
return null;
}
}
private void initCollapsingToolbar() {
final CollapsingToolbarLayout collapsingToolbar =
(CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
collapsingToolbar.setTitle(" ");
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.app_bar);
appBarLayout.setExpanded(true);
// hiding & showing the title when toolbar expanded & collapsed
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
boolean isShow = false;
int scrollRange = -1;
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (scrollRange == -1) {
scrollRange = appBarLayout.getTotalScrollRange();
}
if (scrollRange + verticalOffset == 0) {
collapsingToolbar.setTitle(getString(R.string.app_name));
isShow = true;
} else if (isShow) {
collapsingToolbar.setTitle(" ");
isShow = false;
}
}
});
}
}
내 어댑터 클래스 :
public class ShopsAdapter extends RecyclerView.Adapter<ShopsAdapter.MyViewHolder> {
Context mContext;
List<String> shopsList;
ProgressDialog progressDialog;
public class MyViewHolder extends RecyclerView.ViewHolder {
public ImageView thumbnail;
public MyViewHolder(View view) {
super(view);
thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
}
}
public ShopsAdapter(Context mContext, List<String> shopsList) {
this.mContext = mContext;
this.shopsList = shopsList;
progressDialog = new ProgressDialog(mContext);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.shop_card, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
shopsList.get(position);
try {
progressDialog.show();
progressDialog.setMessage("Czekaj...");
String stringformat = String.format("http://www.wp.pl%s.png", shopsList.get(position));
Glide.with(mContext).load(stringformat).listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
Log.d("fsfsdf", e.getMessage());
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
progressDialog.hide();
return false;
}
}).centerCrop().fitCenter().into(holder.thumbnail);
} catch (Exception e) {
Glide.with(mContext).load("http://www.wp.pl/Zabka.png").centerCrop().fitCenter().into(holder.thumbnail);
}
holder.thumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Log.d("Nazwa sklepu: ", shopsList.get(position));
Intent intent = new Intent(mContext, MapActivity.class);
intent.putExtra("shopName", shopsList.get(position));
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return shopsList.size();
}
}
위대한 이미지가로드되었을 때 어떻게 알림을받을 수 있습니까? –
그럴 필요가 없습니다. 이미지가 그 위에로드 된 후에는 사라진 것처럼 보입니다. –
이 레이아웃이 어떻게 보이는지 샘플을 보여줄 수 있습니까? 나는 혼란스럽고 어떻게 작동하는지 상상할 수 없다 ... –