我想点击一个文本视图,通过android中的java增加我的按钮

时间:2016-08-03 20:01:58

标签: android loops widget android-linearlayout

此代码位于on click侦听器下,也位于on create方法下,时间点击textView或加载它停止运行的页面并写入不幸的是,appName已停止。

   for (int i = 0 ; i < MAX_BUTTONS; i++){
       Button button = (Button) getLayoutInflater().inflate(R.layout.button_layout,buttonsContainer,false);
       button.setText("Test" + i);
       button.setOnClickListener((View.OnClickListener) this);
       buttonsContainer.addView(button);

       if (i != MAX_BUTTONS - i){
           buttonsContainer.addView(new Space(this),new ViewGroup.MarginLayoutParams(buttonsSpacing,buttonSize));
       }

   }

2 个答案:

答案 0 :(得分:0)

我认为这是因为你在setOnClickListener中的强制转换。只需使用“this”作为参数,如果您的类实现了侦听器,则不需要强制转换。另请注意,您通过在循环中调用getLayoutInflater来创建不必要的对象垃圾。您需要做的就是在循环外调用一次,并使用它的引用。这样,您只需创建一个n +对象,而不是创建n +对象。最后我看到你正在打电话

  if(i != MAX_BUTTONS - i) 

不是你的意思

if(i != MAX_BUTTONS - 1)

答案 1 :(得分:0)

看起来您可能需要在循环的每次迭代中创建一个新的Button对象,而不是给布局充气,例如

   for (int i = 0 ; i < MAX_BUTTONS; i++){
       Button button = new Button(this);
       button.setText("Test" + i);
       button.setOnClickListener((View.OnClickListener) this);
       buttonsContainer.addView(button);

       if (i != MAX_BUTTONS - i){
           buttonsContainer.addView(new Space(this),new ViewGroup.MarginLayoutParams(buttonsSpacing,buttonSize));
       }

   }

由于您是以编程方式创建Button,因此您可能需要检查this答案以创建LayoutParams。

编辑:我想提及我同意Bryan Mill关于你的回答如果你的Activity实现了View.OnClickListener,你可以通过传递上下文来构造你的监听器,例如button.setOnClickListener(this),以及你或许打算写if(i!= MAX_BUTTONS - 1)而不是-i。