更新列表视图中的单行以显示隐藏的文本视图

时间:2011-12-22 16:16:32

标签: android listview visibility android-arrayadapter

我正在尝试通过将第二个文本视图的可见性从“消失”更改为“可见”来更新列表视图中的单行(两个文本视图)。

以下是自定义布局的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。这很完美。我遇到问题的地方是将更改推回屏幕。

这是我的数组适配器的测试代码,以及尝试在单行的第二个textview上设置visiblity。

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的可见性更改推回到适配器/列表视图并在屏幕上更新,从而可以看到该特定行上的第二个textview。 / p>

一旦我开始工作,我想触发它​​。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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;

在适配器的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
 }