Android在应用程序状态下将ImageView保存为
问题描述:
我制作了一个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状态保存这个???
答
那是因为你的ListView是内部的OnCreate()A.活动的方法定义 执行下列该活动,让您在屏幕方向UIfreeze
添加以下活动申报清单:
android:configChanges="orientation"
所以它看起来像
<activity android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
android:name=".your.package">
的问题是,该系统破坏活动时,发生配置更改。
感谢 迪帕克
这工作 - 谢谢,虽然我是有点更关心的是试图拯救的ImageView阵列进入App国... – Dagan 2011-06-17 12:22:10