2011-06-17 46 views
0

我制作了一个Android应用程序,该应用程序可以获取XML Feed(离开网站)并在其中显示图像。Android在应用程序状态下将ImageView保存为

我使用的是“画廊”和“图像适配器”显示所有图像 - 从网址加载它们(作为原料提供了一个网址)

但是当过手机改变oriantation应用重新设置自己和状态丢失 - 导致饲料再次消耗,图像重新加载(这是非常大的带宽)

在ImageAdapter我创建了一个ImageView对象的数组,允许我将从网站加载的图像保留在本地对象上(以免再次加载它们)

但是sin每当手机改变方向时,应用程序就会重新设置,对象数组被清除,所有事情都会重新进行备份。

我想保存这个ImageView数组在应用程序状态,但无法找到正确的功能?

下面是代码:

package com.test; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.Toast; 


public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 

    private String[] mImageIds = {}; 
    private String[] titles = {}; 
    public ImageView[] images = {}; 

    public ImageAdapter(Context c) { 
     mContext = c; 

     try{ 
      //open local file and parse to XML 
      DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
      Document doc; 

      doc = docBuilder.parse(mContext.openFileInput("xmlfeed.xml")); 
      doc.getDocumentElement().normalize(); 

      NodeList itms = doc.getElementsByTagName("item"); 
      String temp = ""; 
      String tempTitles = ""; 

      //loop through xml items to retreive all nodes 
      for (int i = 0; i < itms.getLength(); i++){ 
       Node itm = itms.item(i); 
       if(temp==""){ 
        temp = getTagValue(itm, "image"); 
        tempTitles = getTagValue(itm, "title"); 
       }else{ 
        temp = temp + "," + getTagValue(itm, "image"); 
        tempTitles = tempTitles + "," + getTagValue(itm, "title"); 
       } 
      } 
      mImageIds = temp.split(","); 
      titles = tempTitles.split(","); 

      //create all images as empty vars 
      if(images.length==0){ 
       images = new ImageView[itms.getLength()]; 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

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

    public Object getItem(int position) { 
     return position; 
    } 

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     //loads the image in case it does not already exists in the object 
     if(images[position]==null){ 
      ImageView imgs = new ImageView(mContext); 
      try{ 
       imgs.setImageDrawable(drawable_from_url(mImageIds[position], "src")); 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
      imgs.setScaleType(ImageView.ScaleType.FIT_XY); 
      images[position] = imgs; 
     } 
     return images[position]; 
    } 

    Drawable drawable_from_url(String url, String src_name) throws java.net.MalformedURLException, java.io.IOException{ 
     Toast.makeText(mContext, url, Toast.LENGTH_SHORT).show(); 
     return Drawable.createFromStream(((java.io.InputStream)new java.net.URL(url).getContent()), src_name); 
    } 

    public String getTagValue(Node itm, String tagName){ 
     String title_value = ""; 
     if (itm.getNodeType() == Node.ELEMENT_NODE) 
     { 
      Element itmElm = (Element) itm; 
      NodeList title = itmElm.getElementsByTagName(tagName); 
      Element titleElm = (Element) title.item(0); 
      NodeList title_nodes = titleElm.getChildNodes(); 
      title_value = ((Node) title_nodes.item(0)).getNodeValue().trim(); 
     } 
     return title_value; 
    } 
} 

请帮帮忙,我将如何去在App状态保存这个???

回答

0

那是因为你的ListView是内部的OnCreate()A.活动的方法定义 执行下列该活动,让您在屏幕方向UIfreeze

添加以下活动申报清单:

android:configChanges="orientation" 

所以它看起来像

<activity android:label="@string/app_name" 
     android:configChanges="orientation|keyboardHidden" 
     android:name=".your.package"> 

的问题是,该系统破坏活动时,发生配置更改。

感谢 迪帕克

+0

这工作 - 谢谢,虽然我是有点更关心的是试图拯救的ImageView阵列进入App国... – Dagan 2011-06-17 12:22:10

相关问题