2017-01-16 4 views
-1

1.I имеют TextView с идентификатором 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); 
} 

и,

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

, наконец, в TextView,

public setChildTitle(String childName){ 

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

, какой подход лучше, и почему !!!

СПАСИБО ЗАРАНЕЕ

+0

Существуют накладные расходы вызова 'findViewById' –

+0

А почему не может' setChildFragment' просто позвонить эквиваленту of ((TextView) findViewById (R.id.title)). setText («Hellow World»); 'непосредственно? Примечание: вы никогда не использовали 'childName' –

+0

' findViewById() 'очень дорогостоящая операция, и с увеличением сложности стоимость его компоновки увеличивается. Использование его без необходимости может вызвать икоту в вашем приложении. –

ответ

1

Для первой части откровенно единственное различие между подходом i и ii является то, что поскольку ii не имеет никаких ссылок на TextView объект может получить GC собрано раньше, хотя вы можете достичь того же, написав tv=null; после использования для i. Но в любом случае разница не была бы значительной.

Для второй части лучше хранить ссылку на любое представление, а затем вызывать методы на ней вместо многократного вызова findViewById(R.id.textView1), что является дорогостоящей операцией, поскольку оно приводит к обходу дерева макета и может быть результативным, если макет огромный или сложный. Так что в этом случае i лучше.

Третья часть снова не будет иметь заметных различий в производительности в качестве ссылки на переменную или передачи их в качестве параметра функции, не является основной проблемой производительности.

Чтобы увеличить производительность вашего приложения рассмотреть проектирование макета правильно и использовать передовой опыт от андроида документации 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 вы можете инициализировать его, используя нижеследующую и последующую функцию setText вызова функции textView в функции setChildTitle для setText.

TextView tv = (TextView) findViewById(R.id.textView1); 
Смежные вопросы