0

我的 android 应用程序出现问题,我搜索了太多,但找不到解决问题的线索。这是我的问题

我有一个列表视图,单击每个列表项我开始一个新的 AsyncTask 更新列表项中的进度条。

当系统出于任何原因破坏我的活动时,问题就出现了,AsyncTasks 仍在工作,但它不会影响新创建的进度条,

任何人都可以帮助我吗?提前致谢。

4

3 回答 3

1

我遇到了同样的问题然后我所做的是我有一个可序列化的类,其中存储了列表视图的数据,并且在该类中我创建了一个名为

国际进展;

当从 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 添加或显式添加它。我希望这可以帮助您,您将更好地了解如何在列表视图中处理进度条。

于 2013-08-26T09:26:35.800 回答
0

onProgressUpdate创建一个回调侦听器方法并在您的活动中覆盖它。从AsynkTask 中调用此回调方法。并更新进度条。

于 2013-08-26T08:59:11.240 回答
0

我认为这篇文章 可以帮助你。但这尤其适用于由于配置更改而重新创建活动的情况。

于 2013-08-26T09:33:19.333 回答