【发布时间】:2014-05-30 07:29:01
【问题描述】:
我正在开发带有操作栏选项卡的导航抽屉的应用程序。如果方向发生了变化,内容不应丢失。
我尝试在清单文件中添加一个条目:
android:configChanges="orientation|screenSize|keyboard|screenLayout"
它适用于 TextView 值,但不适用于 ImageViews。
我在 ListView 中有图像,它将从 Web 服务加载,如果方向已更改,则图像不应从 Web 服务重新加载。
我试图重写这个方法,但我不知道如何持久化数据。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
谁能指导我找到解决方案?
我的适配器完整代码在这里
private ArrayList<Blog> blogs = new ArrayList<Blog>();
private ListView listView;
private ReadingsAdapter adapter;
private ProgressBar progressBar;
private TextView empty;
public static ReadingsTab newInstance(Category category) {
ReadingsTab fragment = new ReadingsTab();
Bundle args = new Bundle();
args.putSerializable("Category", category);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
final Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab_readings, container,
false);
setRetainInstance(true);
listView = (ListView) rootView.findViewById(R.id.listView);
progressBar = (ProgressBar) rootView
.findViewById(R.id.reading_tab_progressbar);
empty = (TextView) rootView.findViewById(R.id.empty);
progressBar.setVisibility(View.VISIBLE);
loadBlog(getActivity());
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
}
public void loadBlog(final Activity activity) {
progressBar.setVisibility(View.VISIBLE);
MultipartEntity parms = new MultipartEntity();
try {
parms.addPart("catid", new StringBody(((Category) getArguments()
.getSerializable("Category")).getId()));
Log.d("Category Id",
((Category) getArguments().getSerializable("Category"))
.getId());
new JSONParser(getActivity(), Server.FUNC_GET_LOAD_READING,
new RequestListener() {
@Override
public void onRequestSuccess(JSONObject jsonObject) {
progressBar.setVisibility(View.GONE);
try {
if ("success".equalsIgnoreCase(jsonObject
.getString("status"))) {
JSONArray data = jsonObject
.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
blogs.add(Blog.fromJson(data
.getJSONObject(i)));
}
adapter = new ReadingsAdapter(activity,
blogs);
listView.setAdapter(adapter);
} else {
listView.setEmptyView(empty);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onRequestFailure(Error error) {
progressBar.setVisibility(View.GONE);
Helper.failureErrorMessage(getActivity(), error);
}
}).execute(parms);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
博客是一个类
package com.griffin.android.schoolapp.adapter;
导入 org.json.JSONException; 导入 org.json.JSONObject;
公开课博客{
private String id;
private String title;
private String image;
private String url;
public Blog(String id, String title, String image,String url) {
super();
this.id = id;
this.title = title;
this.image = image;
this.url = url;
}
public static Blog fromJson(JSONObject object) throws JSONException {
return new Blog(object.getString("id"), object.getString("title"),object.getString("image"),
object.getString("url"));
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String toString() {
return title;
}
}
适配器是 公共类 ReadingsAdapter 扩展 ArrayAdapter { 私人最终 LayoutInflater mInflater; 受保护的 ImageLoader imageLoader;
public ReadingsAdapter(Context context, List<Blog> data) {
super(context, R.layout.readings_list_item, data);
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(context));
}
/**
* Populate new items in the list.
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
view = mInflater.inflate(R.layout.readings_list_item,
parent, false);
} else {
view = convertView;
}
final Blog item = getItem(position);
final ImageView contentimage = (ImageView)view.findViewById(R.id.contentImage);
((TextView) view.findViewById(R.id.title)).setText(item.getTitle());
final ProgressBar imageloading = (ProgressBar)view.findViewById(R.id.imageloading);
ImageLoader.getInstance().displayImage(item.getImage(), contentimage, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
imageloading.setVisibility(View.VISIBLE);
contentimage.setVisibility(View.GONE);
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
imageloading.setVisibility(View.GONE);
contentimage.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
imageloading.setVisibility(View.GONE);
contentimage.setVisibility(View.VISIBLE);
contentimage.setImageBitmap(loadedImage);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
imageloading.setVisibility(View.GONE);
contentimage.setVisibility(View.VISIBLE);
}
});
contentimage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String txt = item.getUrl();
Intent intent = new Intent(getContext(),WebPage.class);
intent.putExtra("url", txt);
getContext().startActivity(intent);
}
});
return view;
}
}
【问题讨论】:
-
你已经阻止它改变方向了..
标签: android configuration screen-orientation