如何设置主活动中定义的视图的文本(无XML)

时间:2016-08-13 22:07:05

标签: java android button layout

我有一个首先在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中预先定义这些按钮,因为它们是根据程序的其他因素生成的。

谢谢。

1 个答案:

答案 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!");
    }
}