单击时的 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
}
});
我已将 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
}
});