【问题标题】:How to set text of a view defined in the Main Activity (no XML)如何设置在主活动中定义的视图的文本(无 XML)
【发布时间】:2016-12-20 14:46:44
【问题描述】:

我有一个 textView,它首先在 Main Activity onCreate 文件中创建。像这样

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

谢谢。

【问题讨论】:

  • 为什么需要它的 id?将Button 定义为MainActivity 中的全局变量,并在该文件中的任何位置使用它。
  • @Yildirim 是的,但我需要 ID,因此我可以根据输入相应地更新按钮。
  • findViewById 通常用于扩充您在活动的相应 XML 文件中定义的 UI 元素,而不是用于您在 Java 代码中创建的 UI 元素。

标签: java android button layout


【解决方案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!");
    }
}

【讨论】:

  • 是的,我已经做到了。没有 findViewById 有什么办法吗?所以你可以绕过集成 ID 分配?
  • @Fidel_Willis 您可以简单地将引用保存为类成员。
  • @Fidel_Willis 或者您可以使用setTagfindViewWithTag
  • 对不起,我刚开始学习 Android 开发,您能否详细说明或提供一个示例。将不胜感激,谢谢
  • @Fidel_Willis 是的,我是来帮你的! “您能否详细说明或提供一个示例。” 哪种方法的示例?类成员或设置标签?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 2016-09-03
  • 2012-06-01
相关资源
最近更新 更多