我的Android应用中遇到问题, 我搜索得太多但我找不到解决问题的线索。 这是我的问题
我有一个列表视图,在每个列表项上单击,我启动一个新的AsyncTask,它更新列表项中的进度条。
当系统出于任何原因破坏我的活动时,问题就出现了,AsyncTasks仍在工作,但它不会影响新创建的进度条,
任何人都可以帮助我吗? 提前谢谢。
答案 0 :(得分:1)
我遇到了同样的问题然后我所做的是我有一个Serializable类,其中存储了listview的数据,在该类中我创建了一个名为
的变量int progress;
当从asynsTask更新任何内容时,我将对此变量的更新设置为每行唯一,因为可序列化的类和对象。这是示例 - :
Content.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 - :
AsyncAdapter - :
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);
}});
}
}
在BroadCastReceiver中,您可以设置进度并更新进度条的进度。
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.To在Content中添加数据你要么解析它并使用gson添加或明确地添加它我希望这会对你有所帮助,你会更好地了解如何处理listview中的进度条。
答案 1 :(得分:0)
创建一个回调侦听器方法并在activity中覆盖它。从AsynkTask中的onProgressUpdate
调用此回调方法并更新进度条。
答案 2 :(得分:0)
我认为这Post可以帮到你。但这尤其适用于因配置更改而重新创建活动的情况。