2016-11-01 2 views
0

データベースからいくつかのレコードを表示するListViewを作成しました。これはうまくいきます。また、誰かがListViewからアイテムをクリックしたときに、正しいIDと商品名が表示されるようにしたい。私の場合、アイテムをクリックするたびに、最後のレコードだけが表示されます。この問題を解決するために私は何ができますか?事前にListViewでsetOnItemClickListenerを使用してデータベースからプログラムでIDを表示する方法

public static final String ID = "id"; 
public static final String PRODUCT_NAME = "productName"; 

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, showProductsUrl, new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 
     try { 
      JSONArray jsonArray = response.getJSONArray("products"); 

      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 
       final String productId = jsonObject.getString("id"); 
       final String productName = jsonObject.getString("productName"); 
       HashMap<String, String> product = new HashMap<>(); 
       product.put(ID, productId); 
       product.put(PRODUCT_NAME, productName); 
       productList.add(product); 

       String[] from = {PRODUCT_NAME}; 
       int[] to = {R.id.productName}; 

       ListAdapter adapter = new SimpleAdapter(getApplicationContext(), productList, R.layout.list_products_to_buy, from, to); 

       ListView listView = (ListView) findViewById(R.id.listView); 
       listView.setAdapter(adapter); 
       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         System.out.println(productId + " " + productName); 
        } 
       }); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

ありがとう:

は、ここに私のコードです!

+1

あなたがループの内側からこの – Real73

答えて

1

まず、ループ内でアダプタを繰り返し宣言しないでください。

IDをご希望の場合は、fromアレイにIDを追加する必要があります。

public static final String ID = "id"; 
public static final String PRODUCT_NAME = "productName"; 

String[] from = { ID, PRODUCT_NAME }; 
int[] to = { R.id.productId, R.id.productName }; 

final ListAdapter adapter = new SimpleAdapter(YourActivity.this, productList, R.layout.list_products_to_buy, from, to); 

ListView listView = (ListView) findViewById(R.id.listView); 
listView.setAdapter(adapter); 
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Object clicked = adapter.getItem(position); // For example 

     // TODO: Somehow extract that data from 'clicked' 

     System.out.println(productId + " " + productName); 
    } 
}); 

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, showProductsUrl, new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 
     try { 
      JSONArray jsonArray = response.getJSONArray("products"); 

      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 
       final String productId = jsonObject.getString("id"); 
       final String productName = jsonObject.getString("productName"); 
       HashMap<String, String> product = new HashMap<>(); 
       product.put(ID, productId); 
       product.put(PRODUCT_NAME, productName); 
       productList.add(product); 
      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     adapter.notifyDataSetChanged();  

    } 
}); 

// TODO: Add to Volley request queue 
+0

はい、あなたが正しい、私はちょうど取り除かれるアダプター以外の場所を定義するためにloop.tryためにリスナーを定義し、それが良く働いています。そして今、どのようにしてidとproductNameを 'クリックされたオブジェクト 'から抽出できますか?ありがとう –

+0

私はちょうどそれを解決しました。私はidとproductNameを 'clicked Object'から取得しました。どうもありがとう! –

関連する問題