使用类在android中设置视图

时间:2011-04-20 11:41:36

标签: android android-layout

我正在编写一个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文件中指定的字符串?

由于

Yotam

要获得解决方案,请阅读以下讨论

1 个答案:

答案 0 :(得分:1)

布局中使用的ID不一定是唯一的,因此我想您应该将添加的Views保留在ArrayList中,因为

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" [...] />