0

サービスから実行する AsyncTask クラスがいくつかあります。

public class DownloadTask extends AsyncTask<Void, Integer, Boolean {

    @Override
    protected Boolean doInBackground(Void... arg0) {
        // do something
        publishProgress(i);
    }

    @Override
    protected void onProgressUpdate(Integer ... progress) {
        if(textView()!=null) getTextView().setText(i + "%");
    }

    public void setTextView(TextView textView) {
        this.textView = textView;
    }

}

ListAdapter では、メソッドで AsyncTask のメソッドをgetView()使用して AsyncTask に TextView を設定していますsetTextView()

public class DownloadTasksAdapter extends BaseAdapter {
    private final Activity context;
    private DownloadTask[] downloadTasks;

    public DownloadTasksAdapter(Activity context, DownloadTask[] downloadTasks) {
        this.context = context;
        this.downloadTasks = downloadTasks;
    }

    public int getCount() {
        return downloadTasks.length;
    }

    public DownloadTask getItem(int position) {
        return downloadTasks[position];
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {       
        LayoutInflater inflater = (LayoutInflater) context.getLayoutInflater();
        final View rowView = inflater.inflate(R.layout.downloads_listview_row, parent, false);


        final TextView progressTxt = (TextView) rowView.findViewById(R.id.downloads_listview_row_progress);


        switch (downloadTasks[position].getStatus()) {
        case RUNNING:
            downloadTasks[position].setTextView(progressTxt);

            break;
        }

        return rowView;
    }
}

AsyncTask はサービスから実行されていますが、ListView を含むアクティビティを開くと、AsyncTask はいくつかのフィールドを更新する必要があります。これを行うにはどうすればよいですか? :(

4

1 に答える 1

1

タスクコール完了後

mAdapter.notifyDataSetChanged();
于 2012-10-06T09:18:37.690 に答える