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

Posted

技术标签:

【中文标题】更新列表视图中的单行以显示隐藏的文本视图【英文标题】:Updating a single row in a listview to show a hidden textview 【发布时间】:2012-01-26 06:15:27 【问题描述】:

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

这是自定义布局的 XML:

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

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

我正在使用 arrayadapter 将字符串 [] 中的数据绑定到列表视图。这是完美的工作。我遇到问题的地方是将更改推回屏幕。

这是我的数组适配器的测试代码,并尝试在单行的第二个文本视图上设置可见性。

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】:

很晚了,但这是我的答案;

在您的代码中,您只是在 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
 

【讨论】:

以上是关于更新列表视图中的单行以显示隐藏的文本视图的主要内容,如果未能解决你的问题,请参考以下文章

隐藏列表视图中的项目

我设置滚动视图偏移以显示被键盘隐藏的文本字段。如果用户在显示键盘时滚动,则滚动视图会向下捕捉

显示/隐藏项目 - 列表视图

如何在滚动列表视图上显示/隐藏底部导航视图?

在列表视图中显示或隐藏对象

单击按钮,在主视图中的 foreach 语句中一次显示/隐藏部分视图结果