Как обрабатывать ViewStub в ListView - PullRequest
1 голос
/ 13 марта 2012

Несколько дней назад я наткнулся на новый Twitter API (версия 3.1.1) и попытался скопировать эффект, который я видел в списке твитов.

К сожалению, я новый пользователь и не могу публиковать изображения, поэтому я пытаюсь объяснить, о чем я говорю

Существует список твитов (просмотр списка), и вы можете взаимодействовать с ними с помощью longKeyPressed. Как только вы нажмете, выбранный элемент исчезнет, ​​и появится новый элемент. в этом новом элементе есть доступная опция для выбранного твита (ретвит, избранное и т. д.)

Я попытался сделать копию этой функции, но у меня есть пара проблем, которые я не могу выяснить.

Давайте предположим, что мы используем ViewStub для оптимизации listView, это макет строки

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ViewStub
    android:id="@+id/twitter_stub"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:inflatedId="@+id/twitter_actions"
    android:layout="@layout/twitter_swipe_actions" />
<LinearLayout android:id="theOneWhichHasToDisappear">
  .....the row of the listVIew.....
<LinearLayout>  

Когда я пытаюсь установить видимость linearLayout («theOneWhichHasToDisappear»), исчезает все, что есть, и вот оно

v.findViewById(R.id.theOneWitchHasToDisappear).setVisibility(View.GONE);
//inflating the stubview
ViewStub stub =  (ViewStub) v.findViewById(R.id.twitter_stub);
View inflated = stub.inflate();

но, к сожалению, я не могу сохранить правильную высоту предмета (высота не должна меняться после нового надувания). В противном случае, когда я заменяю элемент в списке, другие элементы изменяются !!! например, когда я нажимаю на первый элемент списка (первый твит), номер 1 меняет представление, но меняются также цифры 4, 8, 12 и т. д.

Кто-нибудь знает, как это сделать? Спасибо

1 Ответ

1 голос
/ 13 марта 2012

Вы можете поместить ViewStub и макет в один RelativeLayout, таким образом, размер не изменится.

Изменение в других элементах касается повторного использования представления ListView.Вы должны проверить в методе getView () вашего Адаптера, что только в выбранном представлении вы показываете заглушку, в других вы должны скрыть ее.

...