【问题标题】:How to perform onclick action on multiple buttons created dynamically in Android Studio如何对 Android Studio 中动态创建的多个按钮执行 onclick 操作
【发布时间】:2017-06-30 07:26:11
【问题描述】:

我是 android 新手,我想创建一个锻炼应用程序供我自己使用,为此我的想法是-

1) 主活动将显示一个添加按钮以添加练习数量。假设我需要 5 个练习,因此将动态创建 5 个按钮。

2) 现在按钮已创建,我需要的是,当我单击任何按钮时,会调用相应的 textToSpeech,因为此 textToSpeech 类将说出要开始的练习的名称。因为每个按钮都与不同的练习名称和时间相关联。

活动图片-- Main Activity , Add number of Buttons

我不知道该怎么做,因为有很多按钮以及如何为每个按钮调用不同的 textToSpeech。

【问题讨论】:

  • this answer 可能会有所帮助
  • 但是我们在这个答案中有固定数量的按钮(计算器)。
  • @Anu 动态生成按钮 id。
  • @Gowthaman M 好的。

标签: java android


【解决方案1】:

只需在您的活动中添加 onCLickListener

View.OnClickListener onClickListener=new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // put condition as per id of view
            }
        };

//这里同时创建动态添加点击列表

Button button=new Button(ButtonActivity.this);
        button.setText("Button"+i);
        button.setId(1000+i);
        button.setOnCLickListener(onClickListener);

希望我能给你解决方案。

【讨论】:

    【解决方案2】:

    在活动上实现 OnClickListener()

    @Override
    public void onClick(View v) {
    
        switch (v.getId()) {
    
            case R.id.oneButton:
                // do your code
                break;
    
            case R.id.twoButton:
                // do your code
                break;
    
            case R.id.threeButton:
                // do your code
                break;
    
            default:
                break;
        }
    
    }
    

    希望对你有帮助,一切顺利。

    【讨论】:

    • 我正在为按钮动态分配 ID。
    【解决方案3】:

    如果我以正确的方式理解您的问题,您需要在创建按钮时为按钮分配 ID 五个按钮的开始循环

    for(i=1;i<=5;i++){
       Button button=new Button(Activity.this);
       button.setId(R.id.existingButtonId+i);
       button.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);
       button.offsetTopAndBottom(40);
       button.setHint("hint x ");
       yourLayout.addView(button);
     }
    

    在你的活动上实现 onClickListener 并使用

    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.ex1:
                 //call textToSpeech for exercise one
                break;
            case R.id.ex2:
                //call textToSpeech for exercise two
                break;
            default:
                break;
        }
    }
    

    【讨论】:

    • 好的。但是如何像 Main Activity Image 那样排列按钮
    • 还为循环内的按钮设置 clickListner button.setOnClickListener(this);
    • button.setId() 中不允许有字符串
    • 你可以在创建按钮的时候设置按钮的属性,我会更新答案解释更多
    • @Anu As String in not allowed 我的建议是,使用任何现有的 ID 以及循环计数作为按钮的 ID,编辑后的答案中显示的内容相同,希望对您有所帮助
    【解决方案4】:

    在扩展新按钮/视图时添加 clicklistener。

        private void addNewExcercise(String exercise) {
    
        Button button = new Button(ActivityMain.this);
        button.setText(exercise);
    
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // do ur task here
            }
        });
    
        parentLinearLayout.addView(button);
    }
    

    【讨论】:

      【解决方案5】:

      SecondActivity(Button display) 无需创建Activity 创建Java文件并在manifest中添加文件

      GridLayout gridLayout=new GridLayout(this);
          ViewGroup.LayoutParams layoutParams=new ViewGroup.LayoutParams(GridLayout.LayoutParams.MATCH_PARENT,GridLayout.LayoutParams.WRAP_CONTENT);
          gridLayout.setLayoutParams(layoutParams);
          gridLayout.setColumnCount(2);
          setContentView(gridLayout);
          if(getIntent()!=null){
              int buttoncount=getIntent().getIntExtra("value",0);
              for(int i=0;i<buttoncount;i++){
                 Button button=new Button(ButtonActivity.this);
                  button.setText("Button"+i);
                  button.setId(1000+i);
                  button.setBackgroundResource(R.drawable.button_back);
                  button.setPadding(10,10,10,10);
                  gridLayout.addView(button);
              }
          }
      

      用于背景的 XML 文件(在可绘制对象中创建此文件)

       <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android"
      android:shape="oval">
      <solid android:color="#66ff0000" />
      <size
          android:width="120dp"
          android:height="120dp"/>
      </shape>
      

      任何混淆然后使用这是Java文件的完整代码

      public class ButtonActivity extends AppCompatActivity {
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          GridLayout gridLayout=new GridLayout(this);
          ViewGroup.LayoutParams layoutParams=new ViewGroup.LayoutParams(GridLayout.LayoutParams.MATCH_PARENT,GridLayout.LayoutParams.WRAP_CONTENT);
          gridLayout.setLayoutParams(layoutParams);
          gridLayout.setColumnCount(2);
          setContentView(gridLayout);
          if(getIntent()!=null){
              int buttoncount=getIntent().getIntExtra("value",0);
              for(int i=0;i<buttoncount;i++){
                 Button button=new Button(ButtonActivity.this);
                  button.setText("Button"+i);
                  button.setId(1000+i);
                  button.setBackgroundResource(R.drawable.button_back);
                  button.setPadding(10,10,10,10);
                  gridLayout.addView(button);
              }
          }
      
      }
      }
      

      清单文件

      <activity android:name=".ButtonActivity"></activity>
      

      并使用上面的背景文件...

      【讨论】:

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