在android中使用类设置视图

在android中使用类设置视图,android,android-layout,Android,Android Layout,我正在编写一个android应用程序,用户可以在其中以交互方式添加和删除字段。用户添加的每个字段都有一些按钮,以及用户应该能够与之交互的值。我想创建一个子类来处理我可以添加的字段,该字段将保存它自己的onClickListener,但我不确定如何做到这一点 下面是一些伪代码,应该可以让我的意图更清楚 假设我有一门课,vClass: public class sClass extends View implements onClickListener{ this.setContext

我正在编写一个android应用程序,用户可以在其中以交互方式添加和删除字段。用户添加的每个字段都有一些按钮,以及用户应该能够与之交互的值。我想创建一个子类来处理我可以添加的字段,该字段将保存它自己的onClickListener,但我不确定如何做到这一点

下面是一些伪代码,应该可以让我的意图更清楚

假设我有一门课,vClass:

    public class sClass extends View implements onClickListener{
   this.setContextView(R.layout.vClass);//how do I do this in a correct way?
       @Override 
       public void onClick(View v){ //add code here
       }
    }
以及应用程序的主类aClass

public class aClass extends Activity implements onClickListener{
   Button b;
   LayoutInflater i;
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      this.b =(Button)this.findViewById(R.id.btn);
      b.setOnClickLister(this);

   }
   @Override
   public void onClick(View v){
      //this is what I have now to add View
      final LinearLayout canvas =(LinearLayout)aClass.this.findViewById(R.id.main);
      View cv =this.inflater.inflate(R.layout.counter, canvas, false);
      canvas.addView(cv);
   }
}
如何使用vClass向aClass添加元素

输入这是我想到的另一个解决方案

如果我跟踪我添加的所有视图(没有子组件)的id,我可以做类似的事情:

View vv = findViewById(id);
Button bb = vv.findViewByIf(R.id.xmlId);
其中id是我分配给已知视图的id,xmlId是我在xml文件中指定的字符串

谢谢

约坦


要解决这个问题,请阅读下面的讨论

布局中使用的ID不一定是唯一的,因此我想您应该将添加的
视图
保存在
阵列列表
中,如下所示:

View cv =this.inflater.inflate(R.layout.counter, canvas, false);
this.viewList.add(cv);
canvas.addView(cv);
或者,您可以在
sClass
实现中声明索引成员,并将添加的索引存储在
ArrayList
中:

private int index;

public sClass(final int index) 
{
    this.index = index;
}

public int getIndex()
{
    return this.index;
}

@override
public boolean equals(Object obj)
{
    return ((obj instanceof sClass) && (((sClass)obj).getIndex() == this.index));
}
这两种方式都可以访问所需的视图

可以通过
findViewById()
方法访问视图内部的按钮

Button bb = vv.findViewById(R.id.buttonId);
其中R.id.buttonId在vv视图的布局xml文件中声明,如下所示:

<Button android:id="@+id/buttonId" [...] />


谢谢。我会玩一玩,告诉你事情是怎么回事。考虑到这一点,我有一个新问题。在我将放置的每个视图中,都会有一些字段响应onClick。我应该将他们的onClickLister设置为我的click listener,但我如何检查单击了哪个?我无法使用getId()方法,因为id已重载。。。感谢这就是为什么您应该一直跟踪
视图的索引,这样当触发单击事件时,您就可以确切地知道单击了哪个视图的按钮。尽管如此,在被覆盖的
onClick(View v)
方法中,
View
参数是单击的
按钮
实例。如果决定使用自定义视图扩展,您可以在其中插入更多成员,以执行更多自定义操作。我仍然不知道如何判断按下了哪个视图的按钮。我看到的唯一解决方案是跟踪我分配的每个id(即,为我添加到视图中的每个对象分配新id)。