2017-01-16 120 views
-1

1.I有TextView ID为textView1Android的 - 我需要一些澄清

我。

TextView tv = (TextView) findViewById(R.id.textView1); 
tv.setText("Hellow World"); 

或而不产生电视,

((TextView) findViewById(R.id.textView1)).setText("Hellow World"); 

II。

TextView tv = (TextView) findViewById(R.id.textView1); 
tv.setText("Hellow World"); 
tv.setTextSize(someValue); 
tv.setTag("title"); 

((TextView) findViewById(R.id.textView1)).setText("Hellow World"); 
((TextView) findViewById(R.id.textView1)).setTextSize(someValue); 
((TextView) findViewById(R.id.textView1)).setTag("title"); 

其做法是在两种情况下好,有什么区别。

2.similerly我有一个String childName这就需要从3种方法

访问

II可以创建一个场变量childName,并且可以从所有3种方法

通过每个ii.passing可变访问方法等,

setChildFragment(childName); 

public setChildFragment(String childName){ 
. 
. 
. 
setChildView(childName); 
} 

和,

在TextView中
public setChildView(String childName){ 
. 
. 
. 
setChildTitle(childName); 
} 

最后,

public setChildTitle(String childName){ 

((TextView) findViewById(R.id.title)).setText("Hellow World"); 
} 

哪种方法更好,为什么!!!

谢谢提前

+0

有调用'findViewById' –

+0

的开销为什么不能'setChildFragment'只是调用相当于((TextView)findViewById(R.id.title))。setText(“Hellow World”);'直接?注意:您从未使用'childName' –

+0

'findViewById()'是非常昂贵的操作,并且随着它的布局成本的复杂性增加。不必要地使用它可能会在您的应用程序中引起打嗝。 –

回答

1

对于第一部分坦白你的方法iii之间的唯一区别是,因为ii有TextView的没有参考对象,它可能会GC收集越早,虽然可以通过使用后写tv=null;达到同样的为i。但无论如何,差异不会很大。

对于第二部分,最好存储对任何视图的引用,然后调用其上的方法,而不是重复调用findViewById(R.id.textView1),这是一个昂贵的操作,因为它会导致布局树遍历,并且可能会导致性能下降布局非常庞大或复杂。所以在这种情况下i更好。

第三部分再次不会引起任何明显的性能差异,因为引用变量或将它们作为函数参数传递不是主要的性能问题。

为了提高应用性能考虑合理设计布局,并使用Android电子文档Read this良好做法更多信息

0

您可以使用下面的实现即,

((TextView) findViewById(R.id.textView1)).setText("Hellow World"); 

如果该值设置只有一次,你不必一次又一次地调用它。

但是,像你的情况,你在呼唤以下功能的3倍,

public setChildTitle(String childName){ 

((TextView) findViewById(R.id.title)).setText("Hellow World"); 
} 

所以,如果你去了这个方法,每当setChildTitle叫做TextView的将被一次又一次地初始化。相反,全局一次在onCreate函数中,您可以使用下面的方法对它进行初始化,然后将setChildTitle函数中的textView的setText函数调用setText。

TextView tv = (TextView) findViewById(R.id.textView1);