2012-06-23 25 views
5

Tengo un listView que tiene información dentro y cuando hago clic en una fila debe darme todos los detalles debajo de esa fila seleccionada, en esa fila selecta tengo imagen, imagename, precio, etc. así que cuando hago clic en la imagen en la vista de lista, debe llenar toda la información que incluye la imagen en una próxima actividadCómo obtener valor enListItemClick y pasarlo a otra actividad

he tratado de mostrar en mi ListView y bien, aquí mi código:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     JSONObject json = JSONfunctions.getJSONfromURL("http://10.0.2.2/php/p.php"); 

      try{ 

       JSONArray earthquakes = json.getJSONArray("prop"); 

       for(int i=0;i<earthquakes.length();i++){       

        JSONObject e = earthquakes.getJSONObject(i); 

        String BookName = e.getString("P_City"); 
        PNames.add(BookName); 
        String BookImg = e.getString("Pname"); 
        PImages.add(BookImg); 
       }  
      }catch(JSONException e){ 
       Log.e("log_tag", "Error parsing data "+e.toString()); 
      } 


     setListAdapter(new MobileArrayAdapter(this, PNames,PImages)); 


    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 

     String selectedValue = (String) getListAdapter().getItem(position); 
     Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show(); 


     Intent i = new Intent(getApplicationContext(), Searching.class); 
     // sending data to new activity 
     i.putExtra("product", selectedValue); 
     startActivity(i); 


    } 
    } 

EDITAR:

private final Context context; 
    private final String[] myBookNamelist = null; 
    private ArrayList<String> MyP = new ArrayList<String>(); 
    private ArrayList<String> myPurl = new ArrayList<String>(); 
    //ArrayList<HashMap<String, String>> myBookNamelist = new ArrayList<HashMap<String, String>>(); 
    //ArrayList<HashMap<String, String>> myBookImageurl = new ArrayList<HashMap<String, String>>(); 

    public MobileArrayAdapter(Context context,ArrayList<String> Bname,ArrayList<String> BUrl) { 
     super(context, R.layout.list_mobile, Bname); 
     this.context = context; 
     this.MyP = Bname; 
     this.myPurl = BUrl; 
    } 


    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.list_mobile, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.logo); 
     textView.setText(MyP.get(position)); 
     Bitmap bitmap = null; 
     // Change icon based on name 
     JSONObject json = JSONfunctions.getJSONfromURL("http://10.0.2.2/php/p.php"); 
      // http://api.geonames.org/earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=demo 
      try{ 

       JSONArray earthquakes = json.getJSONArray("prop"); 

       //for(position=0;position<earthquakes.length();position++){ 
        JSONObject e = earthquakes.getJSONObject(position); 
        String BB = e.getString("P_City"); 
        MyP.add(BB); 

        String UU = e.getString("Pname"); 
        myPurl.add(UU); 

       //} 

      }catch(JSONException e){ 
       Log.e("log_tag", "Error parsing data "+e.toString()); 
      } 


      String s = MyP.get(position); 
      String i = myPurl.get(position); 

      System.out.println(s); 
      System.out.println(i); 


      try { 
       bitmap = BitmapFactory.decodeStream((InputStream)new URL(i).getContent()); 
      } catch (MalformedURLException err) { 
       // TODO Auto-generated catch block 
       err.printStackTrace(); 
      } catch (IOException err) { 
       // TODO Auto-generated catch block 
       err.printStackTrace(); 
      } 

      //if (!s.equals("")) { 
       imageView.setImageBitmap(bitmap); 
      //} else { 
      System.out.println("Bitmap image: "+position+"="+bitmap); 
       //imageView.setImageResource(R.drawable.android_logo); 
      //} 


     return rowView; 
    } 
} 

Y puedo pasar la posición a la siguiente clase, pero ¿cómo obtener toda la información de una fila seleccionada?

Respuesta

5

yo estaba tratando este código durante dos días ahora, entonces lo tengo, así que aquí va .. onListItemClick pasará una posición:

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 

     String selectedValue = (String) getListAdapter().getItem(position); 
     Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show(); 

Intent moreDetailsIntent = new Intent(ListMobileActivity.this,PropertiesDetails.class); 

     Bundle dataBundle = new Bundle(); 
     dataBundle.putString("SelectedProperty", selectedValue); 
     moreDetailsIntent.putExtras(dataBundle); 
     startActivity(moreDetailsIntent); 


    } 

Entonces segunda clase recibirá los valores que incluye una imagen:

String Price,Desc,City,rooms,address,size,garage,sold,Pname,image1,image2,image3; 
    Bitmap bitmap,bitmap1,bitmap2,bitmap3; 
    TextView txtPrice,txtDesc,txtCity,txtrooms,txtaddress,txtsize,txtgarage,txtsold; 
    ImageView imgpropertyImage,imgpropertyImage2; 
    String result = null; 
    InputStream is = null; 
    StringBuilder sb=null; 
    Button btnNext,btnPrevs; 
    int imgcount = 1; 
    JSONPARSER jsonParser = new JSONPARSER(); 
    private static String url_create_product = "http://10.0.2.2/php/ViewPropertiesByName.php"; 
    // JSON Node names 
    // private static final String TAG_SUCCESS = "success"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.thenew); 

     txtPrice = (TextView) findViewById(R.id.price); 
     txtDesc = (TextView) findViewById(R.id.desc); 
     txtCity = (TextView) findViewById(R.id.City); 
     txtrooms = (TextView) findViewById(R.id.Rooms); 
     txtaddress = (TextView) findViewById(R.id.Address); 
     txtsize = (TextView) findViewById(R.id.Size); 
     txtgarage = (TextView) findViewById(R.id.garage); 
    // txtsold = (TextView) findViewById(R.id.sold);  
     imgpropertyImage = (ImageView) findViewById(R.id.imageViewProp); 
     imgpropertyImage2 = (ImageView) findViewById(R.id.imageViewProp2); 
     btnNext =(Button) findViewById(R.id.btnNext); 
     btnPrevs =(Button) findViewById(R.id.btnPrevis); 





Bundle b = getIntent().getExtras(); // Getting the Bundle object that pass from another activity 
String SelectedProperty = b.getString("SelectedProperty"); 

////////////////////////Executing A Search Query////////////////////////////////// 
List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
postParameters.add(new BasicNameValuePair("P_City",SelectedProperty)); 

//getting JSON Object 
// Note that create product url accepts POST method 
JSONObject json = jsonParser.makeHttpRequest(url_create_product, 
     "POST", postParameters); 
// check log cat fro response 
Log.d("Create Response", json.toString()); 



/////////////Getting Jason Object from the search Query and displaying results 
try{ 

    JSONArray earthquakes = json.getJSONArray("PropertyDetails"); 

    for(int i=0;i<earthquakes.length();i++){       

     JSONObject e = earthquakes.getJSONObject(i); 

     Price = e.getString("P_Price"); 
     Desc = e.getString("P_Desc"); 
     City = e.getString("P_City"); 
     rooms = e.getString("P_Rooms"); 
     address = e.getString("P_Address"); 
     size = e.getString("P_Size"); 
     garage = e.getString("P_garage"); 
     //sold = e.getString("P_Sold"); 
     Pname = e.getString("Pname"); 
     image1 = e.getString("image1"); 
     image2 = e.getString("image2"); 
     image3 = e.getString("image3"); 

     //BookImages.add(BookImg); 


    } 

que ayudar a los que tendrá el mismo problema como el mío en el futuro :)

+0

'String selectedValue = (String) getListAdapter(). GetItem (position);' me da 'NullPointerException'. ¿Eso es normal? – CagCak

2

CREO está extendiendo ArratAdapter y debe estar teniendo row.xml inflada a getView .Y le permite asumir sus row.xml tienen atributos imagename y price.Then que va a utilizar algo así como más adelante fragmento de extraer esos valores.

mListView.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView <? > myAdapter, View myView, int myItemInt, long mylng) { 


      String imageName = ((TextView) myView.findViewById(R.id.imageName)).getText().toString(); 
      String price = ((TextView) myView.findViewById(R.id.price)).getText().toString(); 

     } 

    }); 
+1

por eso es necesario crear una nueva ListView de una nueva clase? porque en tu pones mListView? ... por favor sé más claro porque no entiendo completamente Android. – Zamani

+0

muestre su archivo MobileArrayAdapter.java –

+0

owk, editaré mi código – Zamani

Cuestiones relacionadas