gpt4 book ai didi

android - 为屏幕方向保存我的 ListView 的状态

转载 作者:太空狗 更新时间:2023-10-29 15:17:12 24 4
gpt4 key购买 nike

我浏览了很多关于屏幕方向的帖子。但我的情况有点不同。我的 ListView 具有自定义行布局。使用 AsyncTask 从 Internet 加载 ImageView 位图。我想要的是,是否可以保存我的 ListView 或整个 ListView 的 ArrayAdapter,以便在方向屏幕更改时保留其状态。

请建议一些帖子,或者如果发布了一些代码,那将非常有用。

public View getView(int position, View convertView, ViewGroup parent) {
final Contents entry = contentList.get(position);
View row = convertView;
LayoutInflater infltr = null;
if (row == null) {
infltr = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.highlight_contents_layout,
parent, false);
}

ImageView imgViewImage = (ImageView) row
.findViewById(R.id.imgView_Image);
if (imgViewImage.getTag() == null) {
new DownloadImage(imgViewImage, entry).execute(); //Async Task to download Image
}

}
return row;
}

并且在 onCreate 中我有一个函数调用来填充函数调用的列表:

init(){
listContent = (ListView) findViewById(R.id.listview); //vairable declared at top of my class;
contentlist = new ArrayList<Contents>(); //Variable Declared at top of class;

//... Populated the contenlist... in here
//..
//..
adapter = new ListAdapter(getApplicationContext(),
R.layout._contents_layout, contentList,
thumb_image_bytes);
listContent.setAdapter(adapter);
adapter.notifyDataSetChanged();
}

最佳答案

您可以使用 onRetainNonConfigurationInstance() 保留 ListView 的状态方法。此方法在方向更改期间销毁 Activity 之前执行,它可以返回您想要的任何对象,例如您的列表适配器。来信,在onCreate()方法中,可以通过调用getLastNonConfigurationInstance();恢复对象

因此在您的 Activity 中创建字段,例如 mAdapter。该字段将保存对您的列表适配器的引用。像这样覆盖 onRetainNonConfigurationInstance():

@Override
public Object onRetainNonConfigurationInstance() {
return mAdapter;
}

并在 onCreate() 方法中恢复列表适配器:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mList = (ListView) findViewById(android.R.id.list);

Object obj = getLastNonConfigurationInstance();

if(null != obj){//if there is saved adapter - restore it
mAdapter = (ArrayAdapter<String>)obj;
} else { //if not - create new one
mAdapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1, listData);
}
mList.setAdapter(mAdapter);
}

编辑:

这对我来说不太好:

ImageView imgViewImage = (ImageView) row
.findViewById(R.id.imgView_Image);
if (imgViewImage.getTag() == null) {
new DownloadImage(imgViewImage, entry).execute(); //Async Task to download Image
}

请检查 imgViewImage.getTag() 是否返回 false。我认为你不应该在 getView() 中执行 AsyncTask 因为它会在你滚动列表时执行,所以你可以获得没有成像器的列表项(我认为)。

关于android - 为屏幕方向保存我的 ListView 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11712638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com