如何使用 ListView 上的 setOnItemClickListener 以编程方式显示数据库中的 ID
How to display programmatically the id from a database using setOnItemClickListener on a ListView
我创建了一个 ListView,我想在其中显示数据库中的一些记录。这工作正常。我还希望当有人单击 ListView 中的项目时,显示正确的 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();
}
}
}
提前致谢!
首先,不要在循环中重复声明适配器。
如果需要ID,需要将其添加到from
数组中。
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
我创建了一个 ListView,我想在其中显示数据库中的一些记录。这工作正常。我还希望当有人单击 ListView 中的项目时,显示正确的 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();
}
}
}
提前致谢!
首先,不要在循环中重复声明适配器。
如果需要ID,需要将其添加到from
数组中。
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