能不能够使用的setText()在同一条线上findViewById方法(R.id.textView)

问题描述 投票:0回答:4

我能不能在我的代码使用findViewById('R.id.textView').setText("message"),Android的工作室显示了这个错误

无法解析法“的setText(java.lang.String中)

它是不一样的,因为这问题Android: Why can I not setText in the same line as findViewById在更新的Android版本中,我们不再需要做铸件findViewById()方法,详细内容见这个问题No need to cast the result of findViewById?

重要的是,相同的代码工作,如果我救findViewById的结果在一个变量第一(没有它手工铸造的TextView)即

   TextView textview = findViewById(R.id.textview);
    textview.setText("message");

上面的代码工作正常,如果findViewById返回View对象那么它也应该不行的,如果返回TextView对象然后一个线性码findViewById('R.id.textView').setText("message")应该正常工作。

我知道如果我在TextView中投它,然后它会工作。但我的问题是,为什么我需要投它是否已经返回TextView的对象?谢谢!

java android view
4个回答
2
投票

你需要投textviewTextView

((TextView) findViewById(R.id.textView)).setText("message")

3
投票

您需要将视图铸造成一个TextView

((TextView)findViewById(R.id.textView)).setText("message")

1
投票

您的示例工作的原因是因为静态类型分配(通过变量声明和分配)承诺,对象将是一个TextView,这的确确有setText()方法,或运行时异常会发生。

的setText()未在视图类中定义的,所以直接调用它返回一个异常View对象的结果,因为编译器只知道该方法在返回的视图对象不存在的方法。父母不推断为一个子实例。您作为开发检查或明确说明它(铸造或变量声明和赋值)

在findViewById()来TextView的显式的转换增加了“承诺”,对象将与定义的方法的类,所以它会编译。


0
投票

这是在Fragment?如果是这样,请确保您使用的view内通过onViewCreated(view: View, savedInstanceState: Bundle?)。事情是这样的:

view.findViewById<TextView>(R.id.textview).setText("message")

就算我的答案写在科特林,但你应该能够调换到Java提供方便。让我知道,如果这有助于。

© www.soinside.com 2019 - 2024. All rights reserved.