2012-06-23 4 views
5

Ho un listView che contiene informazioni all'interno e quando faccio clic su una riga deve darmi tutti i dettagli sotto quella riga selezionata, in quella riga selezionata ho un'immagine, nomeimmagine, prezzo, ecc così quando clicco immagine in listView deve riempire tutte le informazioni tra cui l'immagine su una prossima attivitàCome ottenere il valore suListItemClick e passarlo a un'altra attività

ho cercato di visualizzare sul mio listView e ok, qui il mio codice:

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); 


    } 
    } 

MODIFICA:

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; 
    } 
} 

E posso passare la posizione alla classe successiva, ma come ottenere tutte le informazioni da una riga selezionata?

risposta

5

cercavo questo codice da due giorni, poi ho capito, così qui va .. OnListItemClick passerà una posizione:

@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); 


    } 

Poi seconda classe riceverà che i valori tra cui un immagine:

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); 


    } 

ho aiutare coloro che avranno lo stesso problema come il mio in futuro :)

+0

'String selectedValue = (String) getListAdapter(). GetItem (posizione);' mi dà 'NullPointerException'. È normale? – CagCak

2

ho beleive si sta estendendo ArratAdapter e deve essere avere row.xml gonfiato sotto getView .E lascia supporre tuoi row.xml hanno attributi nomeimmagine e price.Then si usare qualcosa come di seguito frammento per estrarre quei valori.

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

quindi ho bisogno di creare un nuovo ListView da una nuova classe? perché nel tuo hai messo mListView? ... per favore sii più chiaro perché non capisco perfettamente Android. – Zamani

+0

mostra il tuo file MobileArrayAdapter.java –

+0

owk, modifico il mio codice – Zamani

Problemi correlati