Android 如何在一个片段中保留一个ListView,并在它离开后保持在完全相同的位置?
我在片段中找到了一个列表视图。问题是每次我打开那个片段时它都会重新加载 我从网上的列表中获取信息,所以每次下载并建立列表都是一个真正的问题 这是我的密码:Android 如何在一个片段中保留一个ListView,并在它离开后保持在完全相同的位置?,android,listview,arraylist,android-fragments,layout-inflater,Android,Listview,Arraylist,Android Fragments,Layout Inflater,我在片段中找到了一个列表视图。问题是每次我打开那个片段时它都会重新加载 我从网上的列表中获取信息,所以每次下载并建立列表都是一个真正的问题 这是我的密码: import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; i
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.example.free.MainActivity.Load;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.Toast;
public class ListActivity extends ListFragment {
public void ToastLoadShout(String msg) {
Toast.makeText(getActivity(), msg.toString(), Toast.LENGTH_LONG).show();
}
private static View View;
HttpClient client;
HttpPost httppost;
HttpGet httpget;
JSONObject json;
List<List<String>> items;
List<item> markers = new ArrayList<item>();
MobileArrayAdapter adapter;
ListView list;
ProgressBar listload;
Button relist;
Preferences pref;
String datadata = "";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (View != null) {
ViewGroup parent = (ViewGroup) View.getParent();
if (parent != null)
parent.removeView(View);
}
View = inflater.inflate(R.layout.activity_list, container, false);
return View;
}
@Override
public void onStart() {
super.onStart();
// pref = new Preferences(getActivity());
//
// listload = (ProgressBar) getView().findViewById(R.id.listload);
//
// relist = (Button) getView().findViewById(R.id.relist);
// relist.setOnClickListener(new OnClickListener() {
// public void onClick(View v) {
// listload.setVisibility(View.INVISIBLE);
// if (adapter!=null)
// adapter.deleteList();
// HashMap<String, String> loc = pref.getData();
// ToastLoadShout(loc.get(Preferences.LAT) + ","
// + loc.get(Preferences.LON));
// if (loc.get(Preferences.LAT) != "0.0"
// && loc.get(Preferences.LAT) != null)
// new Load().execute();
// else
// ToastLoadShout("Get Location First.");
// }});
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
try {
pref = new Preferences(getActivity());
list = (ListView) getView().findViewById(android.R.id.list);
listload = (ProgressBar) getView().findViewById(R.id.listload);
HashMap<String, String> loc = pref.getData();
ToastLoadShout(loc.get(Preferences.LAT) + ","
+ loc.get(Preferences.LON));
if (loc.get(Preferences.LAT) != "0.0"
&& loc.get(Preferences.LAT) != null)
new Load().execute();
else
ToastLoadShout("Get Location First.");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// get selected items
//String selectedValue = (String) getListAdapter().getItem(position);
String selectedValue = markers.get(position).getTitle();
Toast.makeText(getActivity(), selectedValue, Toast.LENGTH_SHORT).show();
}
class Load extends AsyncTask<String, Integer, Boolean> {
@Override
protected void onPreExecute() {
listload.setVisibility(View.VISIBLE);
}
@Override
protected Boolean doInBackground(String... params) {
try {
items = DownloadList();
if (items != null)
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
return false;
}
@Override
protected void onPostExecute(Boolean res) {
// TODO Auto-generated method stub
if (res) {
ArrangePutMarkers();
adapter=new MobileArrayAdapter(getActivity(), markers);
list.setAdapter(adapter);
// ToastLoadShout(Integer.parseInt(items.get(0).get(0))/* id */+","+ items
// .get(1).get(0)/* title */+","+ Integer.parseInt(items
// .get(2).get(0))/* cat */+","+ Integer
// .parseInt(items.get(3).get(0))/* program */+","+
// items.get(4).get(0)/* desc */+","+
// items.get(5).get(0)/* pub */+","+ Integer.parseInt(items
// .get(6).get(0))/* view */+","+ Integer
// .parseInt(items.get(7).get(0))/* like */+","+ Integer
// .parseInt(items.get(8).get(0))/* upvote */+","+
// Integer.parseInt(items.get(9).get(0))/* downvote */+","+
// Double.parseDouble(items.get(10).get(0))/* lat */+","+
// Double.parseDouble(items.get(11).get(0))/* lon */);
} else {
ToastLoadShout("Error");
ToastLoadShout(datadata);
}
listload.setVisibility(View.INVISIBLE);
}
}
public void ArrangePutMarkers() {
if (items != null) {
for (int i = 0; i < items.get(0).size(); i++) {
markers.add(new item(
Integer.parseInt(items.get(0).get(i))/* id */, items
.get(1).get(i)/* title */, Integer.parseInt(items
.get(2).get(i))/* cat */, Integer
.parseInt(items.get(3).get(i))/* program */,
items.get(4).get(i)/* desc */,
items.get(5).get(i)/* pub */, Integer.parseInt(items
.get(6).get(i))/* view */, Integer
.parseInt(items.get(7).get(i))/* like */, Integer
.parseInt(items.get(8).get(i))/* upvote */,
Integer.parseInt(items.get(9).get(i))/* downvote */,
Double.parseDouble(items.get(10).get(i))/* lat */,
Double.parseDouble(items.get(11).get(i))/* lon */));
}
}
}
public void onBackPressed() {
}
}
导入java.io.BufferedReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入com.example.free.MainActivity.Load;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v4.app.ListFragment;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.ProgressBar;
导入android.widget.Toast;
公共类ListActivity扩展ListFragment{
public void ToastLoadShout(字符串消息){
Toast.makeText(getActivity(),msg.toString(),Toast.LENGTH_LONG).show();
}
私有静态视图;
HttpClient;
HttpPost-HttpPost;
HttpGet-HttpGet;
JSONObject json;
清单项目;
列表标记=新的ArrayList();
手机适配器;
列表视图列表;
进度条列表加载;
按钮重新列表;
偏好优先;
字符串datadata=“”;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
如果(视图!=null){
ViewGroup parent=(ViewGroup)View.getParent();
如果(父项!=null)
parent.removeView(视图);
}
视图=充气机。充气(R.layout.activity\u列表,容器,假);
返回视图;
}
@凌驾
public void onStart(){
super.onStart();
//pref=新的首选项(getActivity());
//
//listload=(ProgressBar)getView().findViewById(R.id.listload);
//
//relist=(按钮)getView().findViewById(R.id.relist);
//relist.setOnClickListener(新的OnClickListener(){
//公共void onClick(视图v){
//listload.setVisibility(View.INVISIBLE);
//if(适配器!=null)
//adapter.deleteList();
//HashMap loc=pref.getData();
//ToastLoadShout(loc.get(Preferences.LAT)+“,”
//+loc.get(Preferences.LON));
//if(loc.get(Preferences.LAT)!=“0.0”
//&&loc.get(Preferences.LAT)!=null)
//新加载().execute();
//否则
//ToastLoadShout(“首先获取位置”);
// }});
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
试一试{
pref=新的首选项(getActivity());
list=(ListView)getView().findviewbyd(android.R.id.list);
listload=(ProgressBar)getView().findViewById(R.id.listload);
HashMap loc=pref.getData();
ToastLoadShout(loc.get(Preferences.LAT)+“,”
+loc.get(Preferences.LON));
if(loc.get(Preferences.LAT)!=“0.0”
&&loc.get(Preferences.LAT)!=null)
新加载().execute();
其他的
ToastLoadShout(“首先获取位置”);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
//获取所选项目
//字符串selectedValue=(字符串)getListAdapter().getItem(位置);
String selectedValue=markers.get(position.getTitle();
Toast.makeText(getActivity(),selectedValue,Toast.LENGTH_SHORT).show();
}
类加载扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
listload.setVisibility(View.VISIBLE);
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
试一试{
items=DownloadList();
如果(项!=null)
返回true;
}捕获(例外e){
e、 printStackTrace();
返回false;
}
返回false;
}
@凌驾
受保护的void onPostExecute(布尔值){
//TODO自动生成的方法存根
如果(res){
排列标记();
适配器=新的MobileArrayAdapter(getActivity(),markers);
list.setAdapter(适配器);
//ToastLoadShout(Integer.parseInt(items.get(0).get(0))/*id*/+,“+items
//.get(1).get(0)/*title*/+“,”+Integer.parseInt(项)
//.get(2.get(0))/*cat*/+,“+整数
//.parseInt(items.get(3.get(0))/*程序*/+“,”+
//items.get(4).get(0)/*desc*/+“,”+
//items.get(5).get(0)/*pub*/+,“+Integer.parseInt(items
//.get(6.get(0))/*视图*/+“,”+整数
//.parseInt(items.get(7.get(0))/*类似于*/+“,“+整数
//.parseInt(items.get(8.get(0))/*upvote*/+“,”+
//Integer.parseInt(items.get(9.get(0))/*downvote*/+“,”+
//Double.parseDouble(items.get(10.get(0))/*lat*/+“,”+
//Double.parseDouble(items.get(11.get(0))/*lon*/);
}否则{