Обновление отдельной строки в просмотре списка для отображения скрытого просмотра текста - PullRequest
1 голос
/ 22 декабря 2011

Я пытаюсь обновить одну строку (два текстовых представления) в просмотре списка, изменив видимость второго текстового представления с «ушел» на «видимый».

Вот XML для пользовательского макета:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/userlistlayout"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#000000"/>
    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" android:visibility="gone"/>

Я использую массив-адаптер для привязки данных из строки [] к списку.Это работает отлично.Когда я сталкиваюсь с проблемами, я возвращаю изменения на экран.

Вот тестовый код, который у меня есть для моего адаптера массива, и попытка установить видимость для второго текстового представления одной строки.

searchResults = (ListView) findViewById(R.id.listView1);    
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.userlist, R.id.textView1,names);

searchResults.setAdapter(adapter);
//all the code above this point works perfectly to populate the listview (textview1) 
with the names passed in from the names string[]                    

LinearLayout hold = (LinearLayout) adapter.getView(2, null, null);
TextView hold2 = (TextView) hold.findViewById(R.id.textView2);
hold2.setVisibility(TextView.VISIBLE);

adapter.notifyDataSetChanged();

searchResults.invalidateViews();

Этот код не выдает никаких ошибок, однако я не получаю никаких обновлений в виде списка.Я не уверен, что я делаю неправильно или какой шаг мне не хватает, чтобы изменения видимости, сделанные для hold2, были перенесены обратно в адаптер / просмотр списка и обновлены на экране, благодаря чему будет видно второе текстовое представление в этой конкретной строке.

Как только я получу эту работу, я хочу вызвать ее по щелчку.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 05 июня 2014

довольно поздно, но вот мой ответ;

в вашем коде, вы просто обновляете в oncreate, только один раз.но у вас есть постоянный пользователь для прослушивания, так что вы можете сделать это

listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                final int position, long id) {

            //here 

        }
    });

, теперь вы можете использовать adapter.notifyDataSetChanged ();в клик.

но я думаю, что вы должны проверить эти сообщения

это

, что

также есть другое решение, мы используем анимацию

в глобальном адаптере

  public View selectedView ,previousView ;
  public Animation fadeIn , fadeOut;

в getview адаптера

    try {
                if (previousView != v){                             
                    Animation b = AnimationUtils.loadAnimation(context, R.anim.fadein);
                    b.setDuration(177);
                    b.setFillAfter(true);
                    previousView.startAnimation(b);
                    previousView.findViewById(R.id.llTicketViewOnClickContainer).setVisibility(View.GONE);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

//..... some other code




//just before closing of get view
previousView =v
 }
...