2011-12-22 2 views
1

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

Вот 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"/> 

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

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

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(); 

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

Как только я получу эту работу, я хочу ее активировать onclick.

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

ответ

0

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

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

listview.setOnItemClickListener(new OnItemClickListener() { 

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

      //here 

     } 
    }); 

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

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

this

that

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

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

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

в приемнике адаптера

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 
}