我有一个首先在Main Activity onCreate文件中创建的textView。喜欢这个
Button btn = new Button();
然后我设置它的一些属性,如Id和一些LayoutParams
btn.setText("Button");
btw.setId("btn");
btn.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
所以我的问题是如何在同一个文件中访问此ID以更改按钮的文本。喜欢
findViewById(R.id.btn);
除非我这样做,否则会收到错误消息。我假设,因为这不是在XML中定义的。
编辑:我无法在xml中预先定义这些按钮,因为它们是根据程序的其他因素生成的。
谢谢。
答案 0 :(得分:1)
findViewById()
获取一个整数,因此为了获得对动态创建的TextView
的引用,只需将相同的ID传递给此方法即可。
// Assign it ID 100, for example, when you're creating it
btw.setId(100);
在此示例中,您可以使用以下命令找到它:
TextView textView = (TextView) findViewById(100);
请注意,findViewById
仅查找附加到层次结构的视图,因此您应确保已将动态创建的TextView
附加到层次结构中。
替代方式:将引用另存为类成员。
首先定义MainActivity
类的私有类成员。然后在onCreate
方法中初始化它。因此,只要您在活动类中需要此TextView
,就足以使用该类成员。
public class MainActivity extends Activity{
// This is the class member, I was talking about
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
mTextView = new TextView(this);
mTextView.setText("Button");
mTextView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
}
public void someMethod(){
// Here you can reach to that TextView by using its reference saved in mTextView
mTextView.setText("Hi there!");
}
}