代码之家  ›  专栏  ›  技术社区  ›  DJ'

android中每个文本视图都有独立的事件侦听器

  •  2
  • DJ'  · 技术社区  · 15 年前

    我想将单独的事件侦听器添加到动态创建的textview列表中。目前为止的代码是这样的:

    while (cur.moveToNext()){
        TextView tv = new TextView(this);
        temp = cur.getString(cur.getColumnIndexOrThrow("_ID"));
        result = "some text";
        tv.setText(result);
        tv.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Intent myIntent = new Intent(v.getContext(), newsDetails.class);
                    myIntent.putExtra("id", temp);
                    startActivity(myIntent);
                }
            });
        lOut.addView(tv);
    }
    

    2 回复  |  直到 15 年前
        1
  •  2
  •   beekeeper    15 年前

    假设这是实际代码而不是伪代码,那么我同意亚伦的观点,即使用成员字段可能是问题的根源。但是,我不同意这个解决方案:您不应该使用字段。(如果您必须将字段命名为“temp”,这是一个非常好的提示,它应该是一个局部变量。)如果您创建了一个“final”局部变量,那么您知道它不会从您的下面更改,并且该固定值将被锁定到您的匿名子类(即侦听器)中。

    while (cur.moveToNext()){
        TextView tv = new TextView(this);
        final String temp = cur.getString(cur.getColumnIndexOrThrow("_ID"));
        final String result = "some text";
        tv.setText(result);
        tv.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Intent myIntent = new Intent(v.getContext(), newsDetails.class);
                    myIntent.putExtra("id", temp);
                    startActivity(myIntent);
                }
            });
        lOut.addView(tv);
    }
    

    当然,您应该去掉名为“temp”和“result”的字段,因为局部变量取代了它们。

        2
  •  0
  •   Aaron C    15 年前

    问题可能是你的 temp 变量。我假设它是一个成员变量?事件侦听器中的代码将使用 临时雇员 当事件被触发时 ,而不是 onClick() 函数已定义。

    临时雇员 对象作为TextView的标记,然后在 onClick()

    while (cur.moveToNext()){
            TextView tv = new TextView(this);
            temp = cur.getString(cur.getColumnIndexOrThrow("_ID"));
            result = "some text";
            tv.setText(result);
            tv.setTag(temp);
            tv.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        Intent myIntent = new Intent(v.getContext(), newsDetails.class);
                        myIntent.putExtra("id", v.getTag());
                        startActivity(myIntent);
                    }
                });
            lOut.addView(tv);
        }
    
    推荐文章