引用动态创建的按钮

时间:2017-02-14 23:03:31

标签: android android-button

我一直在寻找如何动态创建按钮。最后,我明白了 但是,我还不知道如何引用特定创建的Button 例如,在下面的示例中,如何在单击时将特定按钮的文本设置为红色?

也就是说,如何把它的id:

Button button_pulsado = (Button) findViewById(R.id.???????);
Button.setTextColor(Color.RED);

这是我的例子:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      List<String> myList = new ArrayList<String>();
      myList.add("A");
      myList.add("B");
      myList.add("C");
      myList.add("D");

      for (int i = 0; i < myList.size(); i++) {
        Button myButton = new Button(this);
        myButton.setText(myList.get(i));

        LinearLayout ll = (LinearLayout) findViewById(R.id.layout1);
        LinearLayout.LayoutParams lp = new       LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        ll.addView(myButton, lp);
      }
    }
}

2 个答案:

答案 0 :(得分:1)

无需致电findViewById()onClickMethod()有一个View参数,该参数引用了被点击的视图:

private changeColorClick = new OnClickListener() {
    @Override
    public void onClick(View v) {
        buttons.add(myButton);
        v.setTextColor(Color.RED);
    }

}

现在在你的循环中:

for (int i = 0; i < myList.size(); i++) {
    Button myButton = new Button(this);
    myButton.setTextColor(myList.get(i));
    myButton.setOnClickListener(changeColorClick);
}

如果您希望每个按钮更改为其他颜色,您可以使用构造函数创建OnClickListener作为命名类:

public ColorClick implements OnClickListener() {
    private Color color;
    public ColorClick(Color color) {
        this.color = color;
    }
}

现在,您需要在构建List时使用MapColor OnClickListenerColor[] colors = new Color[]{Color.RED, Color.GREEN, Color.BLUE}; for (int i = 0; i < myList.size(); i++) { Button myButton = new Button(this); myButton.setTextColor(myList.get(i)); myButton.setOnClickListener(new ColorClick(colors[i]); } 个对象。例如,

setTag()

或者您可以在按钮上使用{{1}}。

答案 1 :(得分:0)

要解决findViewById问题,您可以存储List<Button>

public class MainActivity extends AppCompatActivity {
    private List<Button> buttons = new ArrayList<Button>();

在构建动态视图时添加到该视图。

ll.addView(myButton, lp);
buttons.add(myButton);

使用buttons.get(int position)代替findViewById

...关于

  

例如,在下面的示例中,如何点击特定按钮的文本为红色?

您可以在将每个按钮添加到视图中时为每个按钮设置单独的单击侦听器中的颜色。

class ColorClickListener implements View.onClickListener {
    private String color;
    ColorClickListener(String color) {
        this.color = color;
    }
    @Override 
    public void onClick(View v) {
        // v.setBackground(color); // For example... API may not like this
    }
}

来自活动

String [] colors = new String[] {"#fff", "#ccc"}; 

for (int i = 0; i < colors.length; i++) {
    Button b = new Button(this);
    b.setOnClickListener(new ColorClickListener(Color.parseColor(colors[i])));
}