Java RecyclerView项中的ProgressBar未在notifyDataSetChanged上设置动画
我看到一个类似的问题 RecyclerView项中的AnimationDrawable未在notifyDataSetChanged上设置动画。 但无法解决此问题或修复。我认为这是因为notifyDataSetChanged多次调用以更新UI。当我对这个职位进行评论或通知变更时,它工作得很好。 我在回收视图中有三个项目Java RecyclerView项中的ProgressBar未在notifyDataSetChanged上设置动画,java,android,android-recyclerview,notifydatasetchanged,Java,Android,Android Recyclerview,Notifydatasetchanged,我看到一个类似的问题 RecyclerView项中的AnimationDrawable未在notifyDataSetChanged上设置动画。 但无法解决此问题或修复。我认为这是因为notifyDataSetChanged多次调用以更新UI。当我对这个职位进行评论或通知变更时,它工作得很好。 我在回收视图中有三个项目 进度条 文本视图 钮扣 我需要在单击按钮时调用API并增加textview值。当API调用时,我需要显示进度条并在API完成时隐藏 按钮点击如下: holder.image_add
holder.image_add_overlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.progressBar2.setVisibility(View.VISIBLE);
UpdateProductItem(holder, position);
}
});
private void UpdateProductItem(ShoppinglistAdapter.ViewHolder holder, int position) {
try {
Boolean value = CartFunctions.UpdateCartPostValue(cartAdd, mAPIService);
if (value) {
holder.text_item_cart_count.setText("" + holder.cart_count_value);
// notifyDataSetChanged();
holder.progressBar2.setVisibility(View.GONE);
Task task = new Task();
task.execute();
Toast.makeText(context, context.getResources().getString(R.string.cart_update_toast_message), Toast.LENGTH_SHORT).show();
} else {
holder.cart_count_value = holder.cart_count_value - 1;
}
} catch (IOException e) {
e.printStackTrace();
}
}
我还尝试了
@SuppressLint("StaticFieldLeak")
public class Task extends AsyncTask<String, Integer, Integer> {
@Override
protected Integer doInBackground(String... strings) {
Log.i("test", "doInBackground");
// notifyDataSetChanged();
return null;
}
@Override
protected void onPostExecute(Integer integer) {
Log.i("test", "onPostExecute");
notifyDataSetChanged();
super.onPostExecute(integer);
}
}
可能recyclerview中的2项相同,因此计数显示为两者相同。所以我需要notifyDataSetChanged()而不是notifyItemChanged(position);
有人知道这个解决方案吗?doInBackground()
方法在单独的线程中工作,甚至在UI线程上也不工作
public class Task extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void result) {
adapter.notifyDataSetChanged();
}
}
在UI线程上通知适配器,从AsyncTask
:onPreExecute()
&onPostExecute()
方法在UI线程上工作
public class Task extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void result) {
adapter.notifyDataSetChanged();
}
}
有关更多详细信息,请参阅。在onPostExecute()方法中调用notifyDataSetChanged(),我将尝试并更新您的
异步任务的要点是什么?@Vij我尝试使用onPostExecute(),但是问题仍然是一样的请添加与Progressbar
或RecyclerView.Adapter
或Activity
相关的数据。我更新了这个问题,让它过去吧,我仍然面临这个问题。我有一个疑问,为什么需要AysncTask
在这里?如何获得适配器。notifyDataSetChanged();在onPostExecute()中。如果没有AysncTask,我们可以在RecyclerView项中获得ProgressBar,而不是在notifyDataSetChangedYes上设置动画,我认为这与异步任务
无关。
Task task = new Task();
task.execute();