我是android开发新手,实际上是我的第一个应用程序。我在基于Json的项目中创建了一个动态布局。每个对象包括一个“id”键和一些更多的字符串键。我的json中的每个对象都应该转换为recylcerview中的cardview,每个cardview都有一个按钮。 我的问题是处理这些动态按钮。是否可以确定单击了哪个按钮?
答案 0 :(得分:1)
View.id
是一个整数,如果View
是通过dinamically生成的,你不应该为它设置任意值,你可以使用的是View.tag
。因此,您可以将JSON中定义的ID分配给tag
,然后在单击tag
时检查View
值。 E.g。
val view1 = View(context)
view1.tag = "id from JSON 1"
view1.setOnClickListener(this::onViewClicked)
val view2 = View(context)
view2.tag = "id from JSON 2"
view2.setOnClickListener(this::onViewClicked)
// ...
private fun onViewClicked(view: View){
val jsonId = view.tag as? String
// ...
}
如果您的min sdk级别至少为17,则另一个选项是使用View.generateViewId()
生成id,并将其与JSON ID一起存储在Map
中
答案 1 :(得分:0)
使用Tag区分按钮。将OnClickListener
添加到所有Button
并将不同的String标记设置为按钮。
button.setOnClickListener(this);
添加ClickListener
@Override
public void onClick(View view){
String tag = (String)view.getTag();
if(tag.equals(tag1)){
// action here
}
//.......
.....
}
答案 2 :(得分:0)
是的,你要做的就是给他们一个独特的身份 我假设你必须有一个JSON数组来创建动态按钮。
示例代码
public Button createButton(Context context,String text,int buttonNo){
//here set the properties
Button bt = new Button(context);
bt.setText(text);
bt.setId(buttonNo);
bt.setTag(buttonNo);
bt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//handle the button click, unique id , you can use to differentiate
int id = view.getId();
}
});
return bt;
}
在for循环或您想要创建的次数中调用上面的方法。 您还可以设置上述标签以存储更多信息。
答案 3 :(得分:0)
最后,我将onClickListener放在我的customAdapter类中的onBindViewHolder事件中,如下所示:
int main()
{
int i,n, e;
double terms[n];
double x, y;
printf(" Introduce n\n");
scanf("%d", &n);
y=1;
i=0;
while(e<n)
{
x=1/((y)*(y));
printf("x is %.16lf\n",x);
terms[i]=x;
printf("terms is %.16lf\n", terms[i]);
y++;
i++;
e++;
}
}