2013-06-14 3 views
0

Насколько медленным этот метод, действительно? У меня есть ListView и пользовательский адаптер, который заполнит мой список со следующей выборки XML:.setVisibility (View.VISIBLE) отставание моего UI

<RelativeLayout> 
    <TextView /> 
    <View /> 
    <TextView /> 
    <RelativeLayout> 
     <View android:id="@+id/1" />  <--Take note of this one 
     <TextView android:id="@+id/2" /> <--And this one too 
    </RelativeLayout> 
</RelativeLayout> 

элемент управления ListView сама проходит гладко, прокручивает хорошо и нагрузка не является проблемой. Функциональность ListView включает в себя изменение видимости двух вложенных представлений (те, которые я отметил, чтобы отметить) при щелчке по строке; по умолчанию, они установлены со свойством:

android:visibility="gone" 

Что я делаю, я проверить видимость двух представлений и переключить свой статус видимости, соответственно, например, как, например:

View v = findViewById(R.id.1); 
TextView tv = (TextView) findViewById(R.id.2); 

if (v.getVisibility() == View.VISIBLE) { 
    v.setVisibility(View.GONE); 
    tv.setVisibility(View.GONE); 
} else { 
    v.setVisibility(View.VISIBLE); 
    tv.setVisibility(View.VISIBLE); 
} 

сейчас , все это происходит хорошо, и ошибок нет. Представления переключаются соответственно. Но вот вопрос в том, почему пользовательский интерфейс настолько медленный? Я пробовал комментировать код по строкам, и очень очевидно, что виноваты два метода setVisibility(). Всегда ли так медленно, и есть ли способ ускорить процесс?

Кроме того, я не могу просто переключить видимость оболочки RelativeLayout, мне нужно иметь возможность управлять двумя внутренними представлениями отдельно. Выше приведен пример кода, но он очень похож на то, что у меня есть.

Помогите оценить!

Спасибо, Рей

ответ

0

Я не уверен в этом, но если у вас много элементов в вашем списке, тогда система должна обработать их все и сделать видимыми. Именно по этой причине это может занять много времени. Вы пытались вместо использования GONE использовать INVISIBLE?

+0

Сделать их НЕВИДИМОСТЬ действительно ускорила процесс, но я все еще не понимаю: почему это происходит? – Wakka02

+0

Если вы делаете View invisible, это похоже на то, чтобы сделать его полностью прозрачным. Если вы уйдете, если вам нужно исчезнуть из макета, что заставляет операцию занимать больше времени. Я просто догадываюсь. Также вы можете попытаться использовать совет, предоставленный Sandeep, возможно, он немного ускорится. – Marek

+1

Я просто наткнулся на это - медлительность в моем случае должна была с переоценкой и перерисовкой всего элемента ui - GONE триггера недействительности макета, в то время как INVISIBLE этого не делают. Огромное повышение производительности в моем случае. – gibffe

-3

Вместо View.VISIBLEView.VISIBLE попробовать использовать и View.GONE.

+4

Используйте 'View.VISIBLE' вместо' View.VISIBLE'? Вызывает то же самое для меня ... – dirkk

Смежные вопросы