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*/);
}否则{