我正在尝试通过将第二个文本视图的可见性从“消失”更改为“可见”来更新列表视图中的单行(两个文本视图)。
以下是自定义布局的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>
一旦我开始工作,我想触发它。
非常感谢任何帮助。
答案 0 :(得分:0)
它很晚,但这是我的答案;
在你的代码中,你只需要在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
}