ClickLayout点击

时间:2015-05-20 12:27:02

标签: android android-layout android-relativelayout

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

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

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

rt.setOnClickListener(new OnClickListener() {

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

但是click事件仅适用于最后一个布局..我想在每个布局上使用..我怎样才能实现它?请帮忙。 提前完成。

4 个答案:

答案 0 :(得分:3)

将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
    }
});

}

答案 1 :(得分:1)

添加代码的这一部分

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
}

答案 2 :(得分:1)

click事件适用于您的上一个布局,因为当循环结束时,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
    }
});

答案 3 :(得分:0)

你可以做一些与此相关的事情......

    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
    }
});