我正在编写一个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
要获得解决方案,请阅读以下讨论
答案 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" [...] />