0

リストが更新されたときに最後にスクロールした位置に戻ることについて多くの質問があることを私は知っています. ただし、私の場合(アダプター)、指定された回答が機能しない理由はわかりません。ある時点で新しい情報で更新してアダプターにロードするアダプターがあります。私が望むのは、更新時にアダプターの上部に再び来ず、以前の状態を保存することです。これが私が使用するコードです。

作成時

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.all_candidatos);
        if (Titulacion.IsReachable1(getApplicationContext())){

                new CargarCandidatos().execute();
        timer();


            }else{
                Toast.makeText(getApplicationContext(), R.string.errorserver, Toast.LENGTH_LONG).show();
            }


        setListAdapter(adapter);

        candidatosList = new ArrayList<HashMap<String, String>>();

asynctask は 2 つの部分に分かれています。情報の検索とデータのアダプターへの適合。これを適応させるコードは次のとおりです。

protected void onPostExecute(String file_url) {
    runOnUiThread(new Runnable() {
        public void run() {

            adapter = new SimpleAdapter(
                    Monitorizacion.this, candidatosList,
                    R.layout.list_item, new String[] { TAG_ID,TAG_NSERIE,TAG_TABLET,
                            TAG_DNI, TAG_NOMBRE, TAG_TEST, TAG_PREGUNTA, TAG_BATERIA,TAG_CORRECTAS, TAG_ERRORES},
                    new int[] { R.id.autoid,R.id.id,R.id.tablet, R.id.dni, R.id.nombre, R.id.test, R.id.pregunta, R.id.bateria, R.id.correctas, R.id.fallos});
            adapter.notifyDataSetChanged();
            setListAdapter(adapter);



        }
    });

}

しかし、アダプターの状態を保存してから、以前の状態を考慮してアイテムの表示を開始するにはどうすればよいですか。

ありがとうございました

編集: ListView に戻るときにスクロール位置を維持/保存/復元する回答をここで承認しようとしましたが、それを機能させることはできません。

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.all_candidatos);
        if (Titulacion.IsReachable1(getApplicationContext())){

                new CargarCandidatos().execute();
        timer();


            }else{
                Toast.makeText(getApplicationContext(), R.string.errorserver, Toast.LENGTH_LONG).show();
            }


        setListAdapter(adapter);

        candidatosList = new ArrayList<HashMap<String, String>>();

    lv = (ListView)findViewById(android.R.id.list);


        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                String idd = ((TextView) view.findViewById(R.id.dni)).getText()
                        .toString();

                Intent in = new Intent(getApplicationContext(),
                        MonitDetail.class);
                in.putExtra("idd", idd);

                startActivityForResult(in, 100);
            }
        });

    }



//
//  
    public void timer(){
         new CountDownTimer(tiempo, 1000) {

                public void onTick(long millisUntilFinished) {

                }

                public void onFinish() {
                    index = lv.getFirstVisiblePosition();
                    v = lv.getChildAt(0);
                    top = (v == null) ? 0 : v.getTop();
                      if (Titulacion.IsReachable1(getApplicationContext())){

                          new CargarCandidatos().execute();
                  timer();


                      }else{
                          Toast.makeText(getApplicationContext(), R.string.errorserver, Toast.LENGTH_LONG).show();
                      }
             }
         }.start();}




    class CargarCandidatos extends AsyncTask<String, Void, String> {





        protected String doInBackground(String... args) {




                try {
                    monitorizar();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();}
                return null;




        }


        protected void onPostExecute(String file_url) {
            runOnUiThread(new Runnable() {
                public void run() {

                    adapter = new SimpleAdapter(
                            Monitorizacion.this, candidatosList,
                            R.layout.list_item, new String[] { TAG_ID,TAG_NSERIE,TAG_TABLET,
                                    TAG_DNI, TAG_NOMBRE, TAG_TEST, TAG_PREGUNTA, TAG_BATERIA,TAG_CORRECTAS, TAG_ERRORES},
                            new int[] { R.id.autoid,R.id.id,R.id.tablet, R.id.dni, R.id.nombre, R.id.test, R.id.pregunta, R.id.bateria, R.id.correctas, R.id.fallos});
                    lv.setSelectionFromTop(index, top);

                    adapter.notifyDataSetChanged();

                    lv.setAdapter(adapter);





                }
            });

        }

    }
    public void monitorizar() throws Exception{
        try {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("fecha",Titulacion.fecha()));

            JSONObject json = jParser.makeHttpRequest(url_candidatos, "GET", params);
            ArrayList<HashMap<String, String>> temp;
            temp = new ArrayList<HashMap<String, String>>();


            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {

                candidatos = json.getJSONArray(TAG_CANDIDATOS);

                for (int i = 0; i < candidatos.length(); i++) {
                    JSONObject c = candidatos.getJSONObject(i);
                    String id = c.getString(TAG_ID);
                    String nserie = c.getString(TAG_NSERIE);
                    String tablet = c.getString(TAG_TABLET);
                    String dni = c.getString(TAG_DNI);
                    String nombre = c.getString(TAG_NOMBRE);
                    String test = c.getString(TAG_TEST);
                    String pregunta = c.getString(TAG_PREGUNTA);
                    String bateria = c.getString(TAG_BATERIA);
                    String correctas = c.getString(TAG_CORRECTAS);
                    String errores = c.getString(TAG_ERRORES);

                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put(TAG_ID, id);
                    map.put(TAG_NSERIE, nserie);
                    map.put(TAG_TABLET, tablet);
                    map.put(TAG_DNI, dni);
                    map.put(TAG_NOMBRE, nombre);
                    map.put(TAG_TEST, test);
                    map.put(TAG_PREGUNTA, pregunta);
                    map.put(TAG_BATERIA, bateria);
                    map.put(TAG_CORRECTAS, correctas);
                    map.put(TAG_ERRORES, errores);
                    temp.add(map);
                    candidatosList = temp;
                }
            } 
        } catch (JSONException e) {
            e.printStackTrace();
        }



    }
}
4

2 に答える 2

0

リストビューをグローバルに宣言すると、New-Data-call の前の最後の位置を保持できます。その後、位置選択のために listview を呼び出すことができます。

于 2013-10-04T07:17:18.503 に答える