试图了解Android中的列表视图行为

时间:2014-12-07 22:36:30

标签: android listview

我需要帮助实施我的应用。有不同的活动。在一个活动上,显示列表视图,然后如果用户单击一行,则显示另一个列表视图活动。

列表视图活动可能需要一个变量,该变量用作URL的参数,以检索JSON数据以提供列表视图。我会尝试更好地解释它。

活动1:ListView,其中包含从JSON检索的对象(不需要URL参数)。用户单击行并打开活动2(变量从活动1传递到活动2)。 活动2:ListView包含从JSON检索的对象,URL包括param(从A1传递到A2的变量)。显示列表视图对象。

现在用户点击后退按钮(硬件按钮)。活动1列出了显示的视图对象。

如果用户再次点击A1处的同一行,则A2不会显示任何内容。

如果你需要我展示我的代码,没问题......但我需要更多解释行为而不是代码示例。谢谢

在这里编辑:

ACTIVITY 1 LISTVIEW ADAPTER

import java.util.ArrayList;
import java.util.HashMap;

import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class DondeEsta_ListViewAdapter extends BaseAdapter {

    // Declare Variables
    Context context;
    LayoutInflater inflater;
    ArrayList<HashMap<String, String>> data;
    ImageLoader imageLoader;
    HashMap<String, String> resultp = new HashMap<String, String>();

    public DondeEsta_ListViewAdapter(Context context,
            ArrayList<HashMap<String, String>> arraylist) {
        this.context = context;
        data = arraylist;
        imageLoader = new ImageLoader(context);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        // Declare Variables

        TextView id_categoria_donde_esta_textView;

        TextView nombre_categoria_donde_esta_textView;

        ImageView imagen_categoria_donde_esta;

        TextView tipo_menu;


        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.dondeesta_listview_item, parent, false);
        // Get the position
        resultp = data.get(position);

        RelativeLayout myLayout = (RelativeLayout) itemView.findViewById(R.id.milayout);


        if (position % 2 == 1) {
            myLayout.setBackgroundResource(R.color.fondo);
            //lugar_evento.setBackgroundResource(R.color.fondo);
        } else {
            myLayout.setBackgroundResource(R.color.blanco);
            //titulo_evento.setBackgroundResource(R.color.blanco);
            //lugar_evento.setBackgroundResource(R.color.blanco);
        }
        String tipo_de_menu = resultp.get(DondeEsta_MainActivity.TIPO_MENU);
        String id_categoria_donde_esta =resultp.get(DondeEsta_MainActivity.ID_CATEGORIA_DONDE_ESTA);

        // Locate the TextViews in listview_item.xml
    nombre_categoria_donde_esta_textView = (TextView) itemView.findViewById(R.id.textView1);

    imagen_categoria_donde_esta = (ImageView) itemView.findViewById(R.id.imageView1);


    nombre_categoria_donde_esta_textView.setText (resultp.get(DondeEsta_MainActivity.NOMBRE_CATEGORIA_DONDE_ESTA));

        imageLoader.DisplayImage(resultp.get(DondeEsta_MainActivity.IMAGEN_CATEGORIA_DONDE_ESTA), imagen_categoria_donde_esta);
        // Capture ListView item click
        itemView.setOnClickListener(new OnClickListener() {


            @Override
            public void onClick(View arg0) {
                // Get the position
                resultp = data.get(position);
                String tipo_de_menu = resultp.get(DondeEsta_MainActivity.TIPO_MENU);

                Log.i("TIPO DE MENU =", tipo_de_menu);



                if (tipo_de_menu.equals("1")){
                    Log.i("PULSADO =", tipo_de_menu);

                    //TIPO 1


                    String idPrueba = resultp.get(DondeEsta_MainActivity.ID_CATEGORIA_DONDE_ESTA);
                     System.out.println("la id en DONDEESTA_LV ANTES DE PASARLA A T1 ++++++++++++++++++ ES: " + idPrueba);

                    Intent intent = new Intent(context, DondeEsta_T1_MainActivity.class);
                    intent.putExtra("idPrueba", idPrueba);
                    context.startActivity(intent);

                }
                else 
                    //TIPO 2
                    if (tipo_de_menu.equals("2")){
                        Log.i("PULSADO =", tipo_de_menu);

                        //TIPO 2

                        String idPrueba = resultp.get(DondeEsta_MainActivity.ID_CATEGORIA_DONDE_ESTA);
                         System.out.println("la id en DONDEESTA_LV ANTES DE PASARLA A T1 ++++++++++++++++++ ES: " + idPrueba);

                        Intent intent = new Intent(context, DondeEsta_T2_MainActivity.class);
                        intent.putExtra("idPrueba", idPrueba);
                        context.startActivity(intent);
                    }
                    else {

                Intent intent = new Intent(context, DondeEsta_SingleItemView.class);


                }



            }
        });
        return itemView;
    }
}

ACTIVITY 2主要活动

import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;

public class DondeEsta_T1_MainActivity extends Activity {
    // Declare Variables

     private static final String TAG_NAME = "nombreCategoria";
        private static final String TAG_ID = "idPrueba";
        private String name = "Categoria";
        private String id = "id";
    JSONObject jsonobject;
    JSONArray jsonarray;
    ListView listview;
    DondeEsta_T1_ListViewAdapter adapter;
    ProgressDialog mProgressDialog;
    ArrayList<HashMap<String, String>> arraylist;
    static String ID_DES= "id_des";
    static String TITULO_DES = "titulo_des";
    static String CATEGORIAS_DES = "categoria_des";
    static String LUGAR_DES = "lugar_des";
    static String LATITUD_DES = "latitud_des";
    static String LONGITUD_DES = "longitud_des";
    static String IMAGEN_DES = "imagen_des";
    static String DESCRIPCION_DES = "descripcion_des";
    static String WEB_DES = "web_des";
    static String MAIL_DES = "mail_des";
    static String TEL_DES = "tel_des";
    static String LUGAR_CORTO = "lugar_corto";
    static String idPrueba = "idPrueba";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v("MVASCO", "context is null!");
         // getting intent data
        Intent in = getIntent();

     // Get JSON values from previous intent
       name = in.getStringExtra(TAG_NAME);
       id = in.getStringExtra(TAG_ID);
       idPrueba =in.getStringExtra(idPrueba);

        setContentView(R.layout.dondeesta_t1_listview_main);
        // Execute DownloadJSON AsyncTask
        //new DownloadJSON().execute();
    }

    // DownloadJSON AsyncTask
    private class DownloadJSON extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Create a progressdialog

        }

        @Override
        protected Void doInBackground(Void... params) {
            // Create an array


        //  Log.v("categoria para pasar a la URL", id_categoria_donde_esta);
            arraylist = new ArrayList<HashMap<String, String>>();
            // Retrieve JSON Objects from the given URL address

            jsonobject = JSONfunctions
                    .getJSONfromURL("http://..URL hidden.../casajuventud/app_php_files/recuperar_categorias_donde_esta_t1.php?cat="+idPrueba);

            try {
                // Locate the array name in JSON
                jsonarray = jsonobject.getJSONArray("Categorias");

                for (int i = 0; i < jsonarray.length(); i++) {
                    HashMap<String, String> map = new HashMap<String, String>();
                    jsonobject = jsonarray.getJSONObject(i);
                    // Retrive JSON Objects
                    map.put("id_des", jsonobject.getString("id_des"));
                    map.put("titulo_des", jsonobject.getString("titulo_des"));

                    map.put("categoria_des", jsonobject.getString("categoria_des"));
                    map.put("lugar_des", jsonobject.getString("lugar_des"));
                    map.put("latitud_des", jsonobject.getString("latitud_des"));
                    map.put("longitud_des", jsonobject.getString("longitud_des"));
                    map.put("descripcion_des", jsonobject.getString("descripcion_des"));
                    map.put("web_des", jsonobject.getString("web_des"));
                    map.put("mail_des", jsonobject.getString("mail_des"));
                    map.put("imagen_des", "http://www.solinpromex.com/casajuventud/sitios/"+jsonobject.getString("imagen_des"));                    
                    map.put("tel_des", jsonobject.getString("tel_des"));
                    map.put("lugar_corto", jsonobject.getString("lugar_corto"));
                    // Set the JSON Objects into the array
                    arraylist.add(map);
                }
            } catch (JSONException e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void args) {
            // Locate the listview in listview_main.xml
            listview = (ListView) findViewById(R.id.listview);
            // Pass the results into ListViewAdapter.java
            adapter = new DondeEsta_T1_ListViewAdapter(DondeEsta_T1_MainActivity.this, arraylist);
            // Set the adapter to the ListView
            listview.setAdapter(adapter);


        }
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        new DownloadJSON().execute();
    }
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();

    }

}

ACTIVITY 2 LISTVIEWADAPTER

import java.util.ArrayList;
import java.util.HashMap;

import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class DondeEsta_T1_ListViewAdapter extends BaseAdapter {

    // Declare Variables
    Context context;
    LayoutInflater inflater;
    ArrayList<HashMap<String, String>> data;
    ImageLoader imageLoader;
    HashMap<String, String> resultp = new HashMap<String, String>();

    public DondeEsta_T1_ListViewAdapter(Context context,
            ArrayList<HashMap<String, String>> arraylist) {
        this.context = context;
        data = arraylist;
        imageLoader = new ImageLoader(context);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        // Declare Variables

        TextView id_des;

        TextView titulo_des;

        TextView categoria_des;

        TextView lugar_des;

        TextView latitud_des;

        TextView longitud_des;


        ImageView imagen_des;

        TextView descripcion_des;

        TextView web_des;

        TextView tel_des;

        TextView lugar_corto;
        TextView mail_des;









        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.dondeesta_t1_listview_item, parent, false);
        // Get the position
        resultp = data.get(position);

        RelativeLayout myLayout = (RelativeLayout) itemView.findViewById(R.id.milayout);


        if (position % 2 == 1) {
            myLayout.setBackgroundResource(R.color.fondo);
            //lugar_evento.setBackgroundResource(R.color.fondo);
        } else {
            myLayout.setBackgroundResource(R.color.blanco);
            //titulo_evento.setBackgroundResource(R.color.blanco);
            //lugar_evento.setBackgroundResource(R.color.blanco);
        }
        String tipo_de_menu = resultp.get(DondeEsta_MainActivity.TIPO_MENU);


        // Locate the TextViews in listview_item.xml
    titulo_des = (TextView) itemView.findViewById(R.id.textView1);
    lugar_corto = (TextView) itemView.findViewById(R.id.textView2);

    titulo_des.setText (resultp.get(DondeEsta_T1_MainActivity.TITULO_DES));
    lugar_corto.setText (resultp.get(DondeEsta_T1_MainActivity.LUGAR_CORTO));

    //  imageLoader.DisplayImage(resultp.get(DondeEsta_MainActivity.IMAGEN_CATEGORIA_DONDE_ESTA), imagen_categoria_donde_esta);
        // Capture ListView item click
        itemView.setOnClickListener(new OnClickListener() {


            @Override
            public void onClick(View arg0) {
                // Get the position
                resultp = data.get(position);



                Intent intent = new Intent(context, DondeEsta_T1_SingleItemView.class);

                // Pass all data rank
                intent.putExtra("titulo_des", resultp.get(DondeEsta_T1_MainActivity.TITULO_DES));

                intent.putExtra("lugar_des", resultp.get(DondeEsta_T1_MainActivity.LUGAR_DES));

                intent.putExtra("latitud_des", resultp.get(DondeEsta_T1_MainActivity.LATITUD_DES));

                intent.putExtra("longitud_des", resultp.get(DondeEsta_T1_MainActivity.LONGITUD_DES));

                intent.putExtra("imagen_des", resultp.get(DondeEsta_T1_MainActivity.IMAGEN_DES));

                intent.putExtra("descripcion_des", resultp.get(DondeEsta_T1_MainActivity.DESCRIPCION_DES));

                intent.putExtra("web_des", resultp.get(DondeEsta_T1_MainActivity.WEB_DES));

                intent.putExtra("tel_des", resultp.get(DondeEsta_T1_MainActivity.TEL_DES));

                intent.putExtra("mail_des", resultp.get(DondeEsta_T1_MainActivity.MAIL_DES));

                intent.putExtra("lugar_corto", resultp.get(DondeEsta_T1_MainActivity.LUGAR_CORTO));
                                // Start SingleItemView Class
                context.startActivity(intent);




            }
        });
        return itemView;
    }
}

1 个答案:

答案 0 :(得分:1)

刚刚放

@Override
public void onBackPressed(){
    finish();
}

在第二个活动中的某个地方。

也可以在idPrueba =in.getStringExtra(idPrueba);之后尝试in.removeExtra("idPrueba");

和最后一个:为什么idPrueba是静态的?代码键作为其他变量,静态最终,并将您传递的值传递给另一个变量。当您第一次启动第二个Activity时,您获取新到达的varriable并将其分配给键变量。这个值是静态的,因此Activity的第二次调用已经普遍地覆盖了键(不是&#34; idPrueba&#34;,而是先前在#34; idPrueba&#34;键下传递的变量的值)。可能这是你的问题

对于此代码,最简单的方法是在static之前删除String idPrueba = "idPrueba";,但我建议您将键和值变量分开。还要检查setOnItemClickListener方法,更方便