我有一個問題在我的Android應用程序, 我搜索了太多,但我無法找到一個線索來解決它。 這是我的問題的Android的AsyncTask和進度條
我有一個列表視圖,onclick每個列表項我開始一個新的AsyncTask更新列表項中的進度條。
的問題是當系統破壞我的活動以任何理由,在AsyncTasks仍然工作,但它不會影響新創建的進度條,
任何一個能幫助我嗎? 在此先感謝。
我有一個問題在我的Android應用程序, 我搜索了太多,但我無法找到一個線索來解決它。 這是我的問題的Android的AsyncTask和進度條
我有一個列表視圖,onclick每個列表項我開始一個新的AsyncTask更新列表項中的進度條。
的問題是當系統破壞我的活動以任何理由,在AsyncTasks仍然工作,但它不會影響新創建的進度條,
任何一個能幫助我嗎? 在此先感謝。
我是從同一個問題的痛苦,然後我做了什麼是我在其中爲ListView數據存儲和I類創建了一個名爲
INT進度變量Serializable類;
什麼時候會從asynsTask更新我設置更新這個變量是,因爲序列化類的每一行獨特object.Here是例子 - :
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);
}
並從服務,您可以發送到接收器的進展,並可以更新simultaneously.I覺得這是更好的選擇,而不是使用asynTask.To在添加內容數據,你將不得不對其進行解析,並添加使用GSON或者明確地添加它。我希望這可以幫助你,並且你會更好地理解如何處理listview中的進度條。
你能分享這個解決方案的任何例子嗎? –
@OmarHassan我編輯了我的答案.. –
感謝您的回覆,我用另一種方式工作 –
創建一個回調監聽器方法並在您的活動中覆蓋它。從AsynkTask中的onProgressUpdate
調用此回調方法,並更新進度欄。
我認爲這Post可以幫助你。但是,對於由於配置更改而重新創建活動的情況尤其如此。
你想在活動結束時銷燬AsyncTasks? – AAnkit
沒有,我需要它繼續工作和活動重新更新新progressbars –
它不能做以後,更好的使用服務,如果你想讓它保持工作即使活動是不是在前面。 – AAnkit