2017-02-14 162 views
0

我一直在寻找如何动态创建按钮。最后我得到了它。
但是,我不知道如何对特定创建的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); 
     } 
    } 
} 
+0

改变文字颜色的治疗方法在哪里?什么类和方法? –

+0

你想更改哪个视图?被点击的按钮?还是另一种观点? –

+0

我想改变点击的按钮 – FAR

回答

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]))); 
} 
+0

我不知道如何完整的“buttons.get(int position)”行,你能帮我吗? – FAR

+0

我不知道你想如何使用按钮。这只是一个ArrayList。它有一个get方法。你可以用你想要的按钮的位置来调用它。真的很简单 –

+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对象在施工期间使用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()

+0

@ cricket_007我的坏= p –

+0

谢谢你的建议帮助我解决了我的问题,但是现在又出现了另一个问题:单击另一个按钮时,我不知道如何将Button的文本返回原始颜色(黑色)。如果有人帮助我,我会很感激。 – FAR

+0

对不起,我明白了。 – FAR