2012-06-23 10 views
5

Mam listView, która ma informacje w środku i po kliknięciu w jednym wierszu musi podać mi wszystkie szczegóły pod tym wybranym wierszem, w tym wierszu wybierz mam obraz, imagename, cena itp więc po kliknięciu obrazu w ListView musi wypełnić wszystkie informacje, łącznie z obrazem na następnej aktywnościJak uzyskać wartość naListItemClick i przekazać go do innej działalności

próbowałem wyświetlić na moim ListView i jest ok, oto mój kod:

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


    } 
    } 

EDYTOWANIE:

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

I mogę przekazać stanowisko do następnej klasy, ale jak uzyskać wszystkie informacje z wybranego wiersza?

Odpowiedz

5

starałem ten kod na dwa dni teraz, to mam go, więc o to idzie .. OnListItemClick minie stanowisko:

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


    } 

Następnie druga klasa otrzyma w tym, że wartości zdjęcie:

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


    } 

I pomagając tym, którzy mają ten sam problem jak ja w przyszłości :)

+0

'String selectedValue = (String) getListAdapter(). GetItem (position);' daje mi 'NullPointerException'. Czy to normalne? – CagCak

2

wierzę jesteś rozszerzenie ArratAdapter i musi być o row.xml napompowane pod getView .A pozwala zakładać twoi row.xml mają atrybuty imageName i price.Then można użyć coś jak poniżej fragmencie wyodrębnić te wartości.

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

więc trzeba utworzyć nowy ListView z nowa klasa? ponieważ w twoim tobie umieściłeś mListView? ... proszę bądź bardziej przejrzysty, ponieważ nie rozumiem w pełni Androida. – Zamani

+0

pokaż swój plik MobileArrayAdapter.java –

+0

owk, będę edytować mój kod – Zamani

Powiązane problemy