我想在 ListView 中单击项目时显示项目详细信息,这些详细信息是通过 Volley 从数据库中获取的。我完成了代码,但问题是: 它仅在第二次单击时有效。 例如,当我点击 item1(data->Intent) 时,跳转到详细信息 Activity,但它只显示默认布局( View 中的每个元素都是空的)。然后点击回到上一个ListView,点击item1,全部显示。 现在,如果我点击 item2,它会在详细信息页面中显示 item1。回到ListView点击item2,会显示item2。
这是我的代码: ListView :
lvResults.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
/**
* get data from db based on id_product
*/
Bean bean = resultAdapter.getItem(position);//GET ITEM POSITION
getPromotionById(bean.getIdProduct());//GET DATA JSONOBJECT FROM DATABASE via Volley
Intent intent = new Intent(ListActivity.this, DetailsActivity.class);
intent.putExtra("item", itemToPass);
startActivity(intent);
}
});
getPromotionById(String id_product)
private void getPromotionById(String id_product) {
Map<String, String> map = new HashMap<String, String>();
map.put("id_product",id_product);
CustomRequest jsonObjectRequest = new CustomRequest(Request.Method.POST, showUrl,map,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject promotion = response.getJSONObject("product");
itemToPass.setIdProduct(promotion.getString("id_product"));
itemToPass.setTitle(promotion.getString("name"));
}
catch (JSONException e) {e.printStackTrace();}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {}});
requestQueue.add(jsonObjectRequest);
}
详细 Activity :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
item = new Item();
item = (Item) getIntent().getSerializableExtra("item");
setContentView(R.layout.item_detail_1);
itemTitle = (TextView) findViewById(R.id.title);
setData(item);
}
private void setData(Item item) {
new DownloadImageTask((ImageView) findViewById(R.id.img))
.execute("url");
itemTitle.setText(item.getTitle());
}
最佳答案
针对您的情况: 如我所见,您在数据库中读取数据并等待响应回调。但是,如果您还没有收到回电,您的应用程序调用将转到另一个 Activity ,这就是您看不到任何内容的原因。
你可以这样更新:
private void getPromotionById(String id_product) {
Map<String, String> map = new HashMap<String, String>();
map.put("id_product",id_product);
CustomRequest jsonObjectRequest = new CustomRequest(Request.Method.POST, showUrl,map,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject promotion = response.getJSONObject("product");
itemToPass.setIdProduct(promotion.getString("id_product"));
itemToPass.setTitle(promotion.getString("name"));
//after receive call back, you can start your activity instead of start right after call function read database
Intent intent = new Intent(ListActivity.this, DetailsActivity.class);
intent.putExtra("item", itemToPass);
startActivity(intent);
}catch (JSONException e) {e.printStackTrace();}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {}
});
requestQueue.add(jsonObjectRequest);
}
关于Android ListView Onclick Intent 数据延迟(工作在第二次点击),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288594/