2

我正在开发一个 android 应用程序,我需要在其中下载一些图像并开始幻灯片放映。为了下载图像,我使用的是 AsynTask,一旦图像被下载,我就使用处理程序来开始幻灯片放映。但是在方向改变期间,我无法控制处理程序。因为处理程序对象是用 AsyncTask 类定义的。

以下是我所做的大致情况:

A 类扩展 Activity

B 类异步 = 新 ClassB(this);

async.execute();

B类扩展AsyncTask实现OnPageChangeListener、OnTouchListener

onPreExecute() --------这个方法什么都没有

doInBackground --------我在这里下载图片

onPostExecute ---------处理程序从这里开始,每 5 秒运行一次,以实现幻灯片放映

现在的问题:

在方向更改期间,我确保 AsyncTask 仅被调用一次,否则它会再次下载图像,因此处理程序在方向更改期间未运行。

启动的第一个处理程序对象,它继续运行,但更改不会反映在屏幕上。

我正在考虑以一种方式实现,即使用 AsyncTask 下载图像,一旦下载完成,ClassA 应该获得焦点,并且应该在 ClassA 中实现处理程序(仅在下载图像时)。

4

3 回答 3

0

接口类命名是根据我的情况。请根据您的要求进行调整。ArtikelDetailsDataLoader我的异步任务。这告诉我的活动详细信息已加载。

在你的 B 类

public interface OndetailsLoadInterface {
    public void onDetailsLoad(ArtikelDetailsInfo artikelDetails);
}

OndetailsLoadInterface detailsLoaderInterface;

public void setOnDetailsLoadListener(OndetailsLoadInterface detailsLoader) {
    detailsLoaderInterface = detailsLoader;
}

并且在onPostExecute

detailsLoaderInterface.onDetailsLoad(artikelDetails);

并且在 A 级

ArtikelDetailsDataLoader mLoader = new ArtikelDetailsDataLoader( items.get(position).getId(), mContext); mLoader.setOnDetailsLoadListener(mLoaderLisnter);

OndetailsLoadInterface mLoaderLisnter = new OndetailsLoadInterface() {

        @Override
        public void onDetailsLoad(ArtikelDetailsInfo artikelDetails) {
            //do slide show

        }

    };
于 2012-07-05T10:32:51.237 回答
0

只需在您的Activity调用startSlideShow(position)中创建一个您从您的方法调用的onPostExecute()方法,使用startSlideShow(0).

在方向更改时保存您当前的幻灯片放映位置和下载的图像,然后在您onCreate(Bundle savedInstance)使用startSlideShow(restoredPosition);.

于 2012-07-05T10:35:30.653 回答
0

如果您的问题是由于方向更改时 Activity 重新启动引起的,您是否考虑在您的 AndroidManifest.xml 条目中为 Activity 设置 android:configChanges="orientation" 以防止重新启动?

然后,如果您需要对 UI 执行任何更新(例如切换到不同的布局),您可以处理 onConfigurationChanged(Configuration) 并自己实现它。

于 2012-07-05T10:53:16.413 回答