更新列表视图中的单行以显示隐藏的文本视图
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
【讨论】:
以上是关于更新列表视图中的单行以显示隐藏的文本视图的主要内容,如果未能解决你的问题,请参考以下文章