我的 android 应用程序出现问题,我搜索了太多,但找不到解决问题的线索。这是我的问题
我有一个列表视图,单击每个列表项我开始一个新的 AsyncTask 更新列表项中的进度条。
当系统出于任何原因破坏我的活动时,问题就出现了,AsyncTasks 仍在工作,但它不会影响新创建的进度条,
任何人都可以帮助我吗?提前致谢。
我的 android 应用程序出现问题,我搜索了太多,但找不到解决问题的线索。这是我的问题
我有一个列表视图,单击每个列表项我开始一个新的 AsyncTask 更新列表项中的进度条。
当系统出于任何原因破坏我的活动时,问题就出现了,AsyncTasks 仍在工作,但它不会影响新创建的进度条,
任何人都可以帮助我吗?提前致谢。
我遇到了同样的问题然后我所做的是我有一个可序列化的类,其中存储了列表视图的数据,并且在该类中我创建了一个名为
国际进展;
当从 asyncsTask 更新任何内容时,我将更新设置为此变量,由于可序列化的类和对象,该变量对于每一行都是唯一的。这是示例 - :
内容.java
public class Content implements Serializable {
@SerializedName("id")
protected String id;
protected int progress = -1;
public String getId() {
return id;
}
public String setId(String id) {
this.id = id;
}
public int getProgress() {
return progress;
}
public void setProgress(int progress) {
this.progress = progress;
}
}
MainActivity.java -:
异步适配器 -:
public class AsyncAdapter extends ArrayAdapter<Content> {
Context context;
ArrayList<Content> items;
private static final int TYPE_MAX_COUNT = 1;
public AsyncAdapter(Context context, int resource,
int textViewResourceId, ArrayList<Content> items) {
super(context, resource, textViewResourceId, items);
this.context = context;
this.items = items;
}
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
// Layout inflate code
// if else condition to visible progress bar
viewHolder.progressbar.setProgress(content.getProgress(position));
viewHolder.downloadButton
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//Start service here
Intent serviceIntent = new Intent(MainActivity.this,DownloadService.class);
serviceIntent.putExtra("id",id);
startService(serviceIntent);
}});
}
}
在您的广播接收器中,您可以设置进度并可以更新进度条的进度。
public class DownloadReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, final Intent intent) {
final int progress = intent.getIntExtra("progress", 0);
final String broadcastId = intent.getStringExtra("id");
for(int i=0;i<contents.size();i++) {
if(contents.getId().equals(broadcastId)) {
contents.get(i).setProgress(progress);
}
}
adapter.notifyDataSetChanged(); // to update progressbar and listview
removeStickyBroadcast(intent);
}
从服务中,您可以将进度发送到接收器并同时更新它。我认为这是更好的选择,而不是使用 asynTask。要在内容中添加数据,您可以解析它并使用 gson 添加或显式添加它。我希望这可以帮助您,您将更好地了解如何在列表视图中处理进度条。
onProgressUpdate
创建一个回调侦听器方法并在您的活动中覆盖它。从AsynkTask 中调用此回调方法。并更新进度条。
我认为这篇文章 可以帮助你。但这尤其适用于由于配置更改而重新创建活动的情况。