首页 > 解决方案 > 我想获取单击的课程按钮的 ID 并加载该 ID 的数据

问题描述

我目前正在使用回收器视图使用 JSON 加载课程,第一门课程的 id 在 JSON 中是一个,然后第二个课程的 id 存储在数据库中。我希望,如果我单击第一个按钮,它应该将其 ID 保存到我的会话管理器中,并将其传递给下一个活动以加载其相应的数据,当我单击第二个按钮时,它应该通过传递其各自来加载数据ID。我已经附加了我的回收器视图的 onclick,它应该获取单击的按钮的 ID 并将其存储到一个字符串中,然后我将存储到会话管理器中。

private RecyclerView mRecyclerView;
private CourseAdapter mExampleAdapter;
private ArrayList<CourseItem> mExampleList;
private RequestQueue mRequestQueue;
private static final String URL_PRODUCTS = "https://www.sniptx.com/ws/findTeacher/allCourses.php";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    mRecyclerView = (RecyclerView) findViewById(R.id.course_recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, mRecyclerView, new RecyclerItemClickListener
            .OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
            Toast.makeText(HomeActivity.this, "Item Clicked" + position , Toast.LENGTH_LONG).show();
        }

        @Override
        public void onItemLongClick(View view, int position) {
            //handle longClick if any
        }
    }));
    mExampleList = new ArrayList<>();

    mRequestQueue = Volley.newRequestQueue(this);
    parseJSON();
}
private void parseJSON() {
    StringRequest stringRequest = new StringRequest(Request.Method.GET, URL_PRODUCTS,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                        try {
                            JSONObject obj = new JSONObject(response);
                            JSONArray courseArray = obj.getJSONArray("courses");

                            for (int i = 0; i < courseArray.length(); i++) {
                                JSONObject courseObject = courseArray.getJSONObject(i);

                                String courseName = courseObject.getString("c_name");
                                String id = courseObject.getString("c_id").trim();
                                l.add(new CourseItem(courseName, id));
                            }

                    try {
                        JSONArray array = new JSONArray(response);

                        for (int i = 0; i < array.length(); i++) {

                            JSONObject product = array.getJSONObject(i);

                            String courseName = product.getString("c_name");
                            String id = product.getString("id").trim();

                            mExampleList.add(new CourseItem(courseName, id));
                            Toast.makeText(HomeActivity.this,"ID is" +id, Toast.LENGTH_SHORT).show();

                        }

                        mExampleAdapter = new CourseAdapter(HomeActivity.this, mExampleList);
                        mRecyclerView.setAdapter(mExampleAdapter);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    Volley.newRequestQueue(this).add(stringRequest);    }

}

标签: androidandroid-studioandroid-recyclerviewandroid-listview

解决方案


使用 Intent 将数据(即点击按钮的 id)设置为第一个活动中的额外意图参数,并在第二个活动中获取意图附加值。

// first activity
Intent i = new Intent(getApplicationContext(), SecondActivity.class);  
i.putExtra("id", value);  
startActivity(i);

// second activity
Bundle extras = getIntent().getExtras();  
int id = extras.getInt("id");

推荐阅读