引用动态创建的按钮
Reference to dynamically created Buttons
我一直在寻找如何动态创建按钮。终于明白了
但是,我还不知道如何引用特定创建的 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);
}
}
}
要解决 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
。
关于...
For instance, in my example below, how could I put the text of a specific Button in red when clicked?
您可以在将每个按钮添加到视图中时在单独的点击侦听器中设置颜色。
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
}
}
从 Activity
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])));
}
不需要调用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
创建为命名的 class:
public ColorClick implements OnClickListener() {
private Color color;
public ColorClick(Color color) {
this.color = color;
}
}
现在您需要一个 List
或 Color
个对象的 Map
数组,以便在构建 OnClickListener
期间使用。例如,
Color[] 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()
。
我一直在寻找如何动态创建按钮。终于明白了
但是,我还不知道如何引用特定创建的 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);
}
}
}
要解决 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
。
关于...
For instance, in my example below, how could I put the text of a specific Button in red when clicked?
您可以在将每个按钮添加到视图中时在单独的点击侦听器中设置颜色。
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
}
}
从 Activity
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])));
}
不需要调用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
创建为命名的 class:
public ColorClick implements OnClickListener() {
private Color color;
public ColorClick(Color color) {
this.color = color;
}
}
现在您需要一个 List
或 Color
个对象的 Map
数组,以便在构建 OnClickListener
期间使用。例如,
Color[] 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()
。