为每个表行设置OnClickListener

时间:2016-01-04 13:11:51

标签: android onclicklistener tablelayout tablerow

我有源代码使用json从服务器获取数据并在表中动态显示它。我想让行表中的每个数据都可以点击。点击数据后,它将显示包含数据详细信息的新活动。 这是我的代码:

for (Iterator i = penyakit.iterator(); i.hasNext();) {

        Penyakit p = (Penyakit) i.next();

        /** Create a TableRow dynamically **/
        tr = new TableRow(this);

        /** Creating a TextView to add to the row **/
        String nomor = String.valueOf(no);
        isikolom1 = new TextView(this);
        isikolom1.setText(nomor);
        isikolom1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        isikolom1.setPadding(10, 10, 10, 10);
        isikolom1.setGravity(Gravity.CENTER);
        LinearLayout Ll = new LinearLayout(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 2, 2, 0);
        Ll.addView(isikolom1, params);
        tr.addView((View) Ll); // Adding textView to tablerow.

        TextView isikolom2 = new TextView(this);
        isikolom2.setText(p.getNama());
        isikolom2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        isikolom2.setPadding(10, 10, 10, 10);
        isikolom2.setGravity(Gravity.CENTER);

        idp = p.getId();
        isikolom2.setClickable(true);
        isikolom2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent in = new Intent(getApplicationContext(),
                        detail_penyakit.class);
                // sending pid to next activity
                in.putExtra(TAG_id, idp);

                // starting new activity and expecting some response back
                startActivityForResult(in, 100);
            }
        });

        Ll = new LinearLayout(this);
        params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 2, 2, 2);

        Ll.addView(isikolom2, params);
        tr.addView((View) Ll); // Adding textview to tablerow.

        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));
        no = no + 1;
    }

当我点击TableRow时,它会显示包含最后数据详细信息的新活动。我点击的表行中的数据不详细。如何在单击的表行中显示数据的详细信息?谢谢你的建议。

1 个答案:

答案 0 :(得分:1)

您使用的变量idp是在迭代器之外定义的,因此,在执行迭代器之后,idp的值将是id的最后一个值的penyakit。 因此,在迭代器

中创建局部变量idp