Android ListView Onclick Intent 数据延迟(工作在第二次点击)

标签 android listview android-intent android-activity android-volley

我想在 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());
}

1st click

2nd click

最佳答案

针对您的情况: 如我所见,您在数据库中读取数据并等待响应回调。但是,如果您还没有收到回电,您的应用程序调用将转到另一个 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/

相关文章:

android - 在android中使用自定义数据集创建 ListView ?

android - 广播接收器 onReceive 未获取Intent bundle

android - 将从相机拍摄的图像设置为 ImageView

Android SVG 显示问题

android - 请使用覆盖选项或检查定义,koin android?

android - 如何获取引用属性的值

android - 将 Android 嵌入式 Wear 应用程序 1.x 更新到 2.0

android - java.lang.NullPointerException : Attempt to read from null array 异常

listview - JavaFX 8 自定义 ListView Cells it's Evil

Android 方法未定义