我使用了两种在android活动中创建实例的方法。哪一种方法更好,方法1或方法2。
方法1:
//Global instance
Button btn;
//Inside Oncreate
btn = (Button)findViewById(R.id.btn);
//some other Place
btn.setVisibility(View.VISIBLE);
btn.setText("Hai");
方法2: //在需要的地方
((Button)findViewById(R.id.btn)).setVisibility(View.VISIBLE);
((Button)findViewById(R.id.btn)).setText("Hai");
Butterknife 和数据绑定不是必需的。
答案 0 :(得分:9)
方法#1的性能优于另一方法,因为您只执行方法For i = ListBox1.ListCount - 1 to Step -1
If ListBox1.Selected(i) Then
Listbox1.RemoveItem(i)
End If
Next
一次。此方法负责在父布局的层次结构中搜索视图。当Activity被销毁时,垃圾收集器将释放按钮实例的内存。
答案 1 :(得分:1)
我肯定会选择方法#1 ,因为每次要访问时调用View#findViewById(int)
都是代价高昂的操作,因为每次调用时方法,需要遍历整个视图层次结构才能找到view
。
因此,方法是执行一次并在Activity类中存储对视图的引用,可以在Activity#onCreate()
内部,也可以在第一次访问视图时(尽管如此,它更好)在onCreate()
,因为它更清洁。)
最后,要查找视图,您可以
对于Target API< 26,
Button mSignUpButton;
@Override
protected void onCreate(Bundle savedInstance){
// regular stuff
this.mSignUpButton = (Button) findViewById(R.id.signupbutton);
}
对于Target API> = 26和Android studio版本3及更高版本,
Button mSignUpButton;
@Override
protected void onCreate(Bundle savedInstance){
// regular stuff
this.mSignUpButton = findViewById(R.id.signupbutton);
}
借助API 26和Android Studio 3,Google引入了编译器支持,可以自动将view
转换为适当的子类型。
答案 2 :(得分:0)
似乎问题不太清楚。您询问Activity中的Activity实例或视图实例。
如果您正在寻找更好的方法来实例化活动视图元素&不想使用Butterknife或Databinding或任何其他lib。然后使用方法1,它比方法2更有效。方法1中的代码样板比方法2和方法2更简化。它将更多地优化为视图的无效状态。
Button btn;
//Inside Oncreate
btn = (Button)findViewById(R.id.btn);