如何在方向更改时保留幻灯片的特定文本?

时间:2011-06-29 08:12:31

标签: java android

我的应用中有一个幻灯片,一些文字与每张幻灯片相关联。文字和图像是动态的。如何在方向更改时保留特定幻灯片的文本,以便在方向更改后视图保持不变。我基本上想知道方向更改的幻灯片编号或索引。

我在做的事情如下:

@Override
public Object onRetainNonConfigurationInstance() {

    ArrayList<Object> objList = new ArrayList<Object>();

    Bitmap bitmapList[] = null;
    String data = "";
    try {
        bitmapList = new Bitmap[slides.size()];

        Log.e("ON", "onRetainNonConfigurationInstance() ");
        if (gallery != null) {
            for (int i = 0; i < imgViews.length; i++) {
                LoaderImageView loaderImageView = imgViews[i];
                if (loaderImageView != null) {
                    Bitmap bitmap = loaderImageView.getImageBitmap();
                    data = slides.get(i).getBody();
                    //System.out.println("the body text is: " + data);
                    if (bitmap != null) {
                        bitmapList[i] = new BitmapDrawable(bitmap).getBitmap();
                    }
                }
            }
        }

        objList.add(bitmapList);
        objList.add(isDisplayingText);
        objList.add(data);

    } catch (Exception e) {
        Log.e("Exception ", "LargeSlideShow.onRetain  Message = " + e.toString());
    } catch (Error e) {
        Log.e("Error ", "LargeSlideShow.onRetain   Message = " + e.toString());
    }
    return objList;
}

并在onCreate中这样做:

onCreate()
{  ...

ArrayList<Object> obj1 = (ArrayList<Object>) getLastNonConfigurationInstance();

            if (obj1 != null) {

                bitmaps = (Bitmap[]) obj1.get(0);
                boolean isText = (Boolean) obj1.get(1);
                String data = (String) obj1.get(2);

                System.out.println("The Text received in on Create is:  " + data);
                if (isText == true) {
                    int vis = disText.getVisibility();
                    if (vis == View.GONE) {

                        String formattedBody = makeFormattedBody(data);
                        webView.loadData(formattedBody, "webView/html", "utf-8");
                        disText.setVisibility(View.VISIBLE);
                        disText.startAnimation(animShow);
                        isDisplayingText = true;
                    } else if (vis == View.VISIBLE) {
                        disText.startAnimation(animHide);
                        disText.setVisibility(View.GONE);
                        isDisplayingText = false;
                    }

                }
  ... }

我在哪里错过了镜头,请告诉我。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您需要覆盖活动中的“onConfigurationChanged”功能,并启用活动来处理manifest.xml中的更改:

    <activity android:name=".SlideView"  android:configChanges="orientation"> </activity>

然后你可以再次设置你的视图:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.oneSlide);
    setUpView(); // configure the view e.g. add the picture and the text
}