如何在android中处理动态创建的按钮?

时间:2018-02-25 14:26:30

标签: java android android-layout

我是android开发新手,实际上是我的第一个应用程序。我在基于Json的项目中创建了一个动态布局。每个对象包括一个“id”键和一些更多的字符串键。我的json中的每个对象都应该转换为recylcerview中的cardview,每个cardview都有一个按钮。 我的问题是处理这些动态按钮。是否可以确定单击了哪个按钮?

4 个答案:

答案 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++;
  }
}