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