单击时的 RelativeLayout

RelativeLayout on click

我已将 RelativeLayouts 动态添加到我的 activity。 RelativeLayouts 的数量等于我列表中的项目数。下面是代码:

RelativeLayout rt;
for(int i = 0; i < Names.size(); i++)
    { 
      rt=new RelativeLayout(this);
    }

现在,如果我在列表中有 7 个项目,因此有 7 个 RelativeLayouts,我想在每个项目上设置点击事件。所以我做了:

rt.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //some code
        }
    });

但是点击事件只对最后一个布局起作用。我想在每个布局上都有它。我怎样才能实现它?请帮忙。 提前致谢。

添加这部分代码

rt.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        //some code
    }
});

每个 RelativeLayout 的 for 循环内部。整个代码应该如下所示:

RelativeLayout rt;
for(int i = 0; i < Names.size(); i++)
{ 
     rt=new RelativeLayout(this);
     rt.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //some code
        }
    });
    //add the rt to your parent layout
}

将您的 setOnClickListener() 放入 for 循环本身。

RelativeLayout rt;
for(int i = 0; i < Names.size(); i++)
{ 
  rt=new RelativeLayout(this);
  rt.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        //some code
    }
});

}

点击事件在您的最后一个布局上起作用,因为当循环结束时,obj rt 包含对最后一个布局的引用。

其中一个解决方案是为这些布局创建一个数组,然后为每个布局创建一个 onClickListener

另一个是如果您的监听器对于所有布局都相同,您可以在 for 循环中设置它:

for(int i = 0; i < Names.size(); i++)
    { 
      rt=new RelativeLayout(this);
      rt.setOnClickListener(myListener);
    }

OnClickListener myListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        //your code
    }
});

你能做些与此相关的事情吗...

    RelativeLayout rt;
for(int i = 0; i < Names.size(); i++)
{ 
  rt=new RelativeLayout(this);
  rt.setTag(i);
  rt.setOnClickListener(relativeLayoutClickListener);   

});
}


OnClickListener relativeLayoutClickListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        Integer i = (Integer)v.getTag();
    //based on i value do update
    }
});