我已将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事件仅适用于最后一个布局..我想在每个布局上使用..我怎样才能实现它?请帮忙。 提前完成。
答案 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
}
});