【问题标题】:Dynamic Buttons and OnClickListener动态按钮和 OnClickListener
【发布时间】:2012-12-30 06:37:35
【问题描述】:

假设我有动态创建的按钮:

for(int j = 0; j < spirits.length;

     j++){
                         Button imgBtn = new Button(v.getContext());
                         imgBtn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                         imgBtn.setMinimumWidth(100);
                         imgBtn.setMinimumHeight(100);
                         imgBtn.setId(j+1);
                         imgBtn.setTag(spirits[j]);
                         imgBtn.setText(spirits[j]);
                         imgBtn.setOnClickListener(new SpiritsClickListener());
                         cabinet_layout.addView(imgBtn);
                     }

我想在每次按下按钮时更改按钮的文本(开 - 关) 如何引用 OnClickListener 类中的按钮?

【问题讨论】:

  • 根据您的问题,您可能需要一个切换按钮。对吗?
  • 现在这是一个测试代码。最终它们将成为图像按钮,我希望能够更改图像
  • 您可以通过将其初始化为 false 来为每个按钮使用一个标志。当用户点击它时,根据前一个标志的状态将该标志设置为反转(真或假)。

标签: android class onclick onclicklistener


【解决方案1】:

在您的 onClickListener 中,您有一个名为 onClick(View v){} 的函数,其中 v 是被点击的视图。您可以使用v 获取有关按钮的详细信息,包括其 ID。您也可以采用此视图,如果您知道它是一个按钮,则将其转换为一个按钮。

Button clicked = (Button)v;

然后您可以在您的 javacode 中使用它,就像您通常使用按钮一样。

【讨论】:

    【解决方案2】:

    你为什么不像这样在循环中调用new OnClickListener()

    for(int j = 0; j < spirits.length;j++){
        Button imgBtn = new Button(v.getContext());
        imgBtn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        imgBtn.setMinimumWidth(100);
        imgBtn.setMinimumHeight(100);
        imgBtn.setId(j+1);
        imgBtn.setTag(spirits[j]);
        imgBtn.setText(spirits[j]);
        imgBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //do what you need to do here
            }
        });
        cabinet_layout.addView(imgBtn);
    }
    

    【讨论】:

      【解决方案3】:

      为动态创建的按钮创建一个OnClickListener

       // Create Listener  for Button
          private OnClickListener SpiritsClickListener = new OnClickListener()
          {
              @Override
              public void onClick(View view) {
                  // TODO Auto-generated method stub
                  Button btn = (Button) view;
                 String btnText = btn.getText();
      
                  if(btnText.equalsIgnoreCase("On")){
                       btn.setText("Off");
                   }else{
                       btn.setText("On");
                  }
              }
          };
      

      将此监听器添加到动态创建的按钮中:

      imgBtn.setOnClickListener(SpiritsClickListener);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多