首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过菜单项传递id android

通过菜单项传递id android
EN

Stack Overflow用户
提问于 2017-12-23 06:19:56
回答 2查看 332关注 0票数 1

我正在动态加载导航抽屉中的菜单项。在setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener()的帮助下,我试图从数据库获取id并将其传递给下一个活动,但当我单击菜单项时,它会显示最新的id,然后再次显示第一个id。我怎么才能把这件事做好呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public void addDynamic() {
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(final String response) {

                    try {
                        jsonObject = new JSONObject(response);
                        jsonArray = jsonObject.getJSONArray("list");
                        submenu = menu.addSubMenu("Test");
                        for (int i = 0; i <jsonArray.length(); i++) {
                            jsonObject1 = jsonArray.getJSONObject(i);
                            a = submenu.add(jsonObject1.getString("name"));
                            a.setIcon(new IconicsDrawable(MainActivity.this)
                                    .icon(FontAwesome.Icon.faw_flask)
                                    .sizeDp(24));
                            a.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                                @Override
                                public boolean onMenuItemClick(MenuItem item) {
                                    try {
                                        JSONObject object = new JSONObject(response);
                                        JSONArray array = object.getJSONArray("list");
                                       for (int i = 0; i <array.length(); i++) {
                                            JSONObject object1 = array.getJSONObject(i);
                                            id = object1.getString("id");
                                            Bundle b = new Bundle();
                                            b.putString("id", id);
                                            Intent intent = new Intent(MainActivity.this, TestDetails.class);
                                            intent.putExtra("fid", b);
                                            startActivity(intent);
                                        }
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                        return false;
                                }
                            });
                        }
                    }
                    catch (JSONException e) {
                        Log.e("Error", "Failed" + e.toString());
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("Error", "Try Later" + error.toString());
                }
            });
    RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
    requestQueue.add(stringRequest);
}

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(IconicsContextWrapper.wrap(newBase));
}
EN

回答 2

Stack Overflow用户

发布于 2017-12-23 06:22:29

intent.putExtra()中使用id字符串值,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 JSONObject object1 = array.getJSONObject(i);
 id = object1.getString("id");
 //Bundle b = new Bundle(); remove this line
 //b.putString("id", id); also remove this line
 Intent intent = new Intent(MainActivity.this, TestDetails.class);
 intent.putExtra("fid", id);

要获取意图包值,请尝试下面的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    final Intent intent = getIntent();
    Bundle bundle = intent.getExtras();

    if(bundle != null){
        String FID = bundle.getString("fid");
     }
票数 0
EN

Stack Overflow用户

发布于 2017-12-23 06:35:00

你在这里做什么?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean onMenuItemClick(MenuItem item) {
                                try {
                                    JSONObject object = new JSONObject(response);
                                    JSONArray array = object.getJSONArray("list");
                                   for (int i = 0; i <array.length(); i++) {
                                        JSONObject object1 = array.getJSONObject(i);
                                        id = object1.getString("id");
                                        Bundle b = new Bundle();
                                        b.putString("id", id);
                                        Intent intent = new Intent(MainActivity.this, TestDetails.class);
                                        intent.putExtra("fid", b);
                                        startActivity(intent);
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                                    return false;
                            }

请注意for循环!如果你的循环执行多次,那么会发生什么呢?假设数组长度=2,那么它将迭代两次,对于一次单击项目,它将启动两个活动,其中有一个受尊重的值id,这意味着

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                                    Bundle b = new Bundle();
                                    b.putString("id", id);
                                    Intent intent = new Intent(MainActivity.this, TestDetails.class);
                                    intent.putExtra("fid", b);
                                    startActivity(intent);

这些代码将执行两次,并连续启动两个活动,您将看到最后一个活动。首先解决这个问题,你的问题可能会解决。添加一个条件,就好像您的一次单击只会启动一个活动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47950274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文