好吧所以我没有足够的空间来解释这个,但我有一个带有自定义适配器的ListView,并且在子视图中我有一个textview。当我显示警告对话框并单击肯定按钮时,我正在尝试更改该文本视图的可见性,而我的代码并未更改可见性。
alert.setPositiveButton("Send", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EditText editMsg = (EditText)view.findViewById(R.id.editMsg);
String msg = editMsg.getText().toString().trim();
if (!msg.isEmpty()) {
// show message test
if (name.equals("Contact 0")) {
View v = listView.getAdapter().getView(0, null, null);
TextView tvMsg = (TextView)v.findViewById(R.id.tvMsg);
tvMsg.setText(msg);
tvMsg.setVisibility(View.VISIBLE);
}
}
}
});
是的,代码正在正确执行,是的,我尝试过使用setText和adapter.notifyDataSetChanged,然后在适配器中更改可见性,如果getText> 0
似乎一切都是正确的,它的v是正确的视图,我可以读取其他子视图以确认其正确,setText正在工作但是setVisibility不是吗?为什么我不能改变可见度?
答案 0 :(得分:0)
因为,当调用xml文件的适配器再次初始化时,可能是 TextView 隐藏在xml文件中。所以,我的建议是:
放一个全局变量,假设它是 global_var ;
将以下代码写入适配器getView()方法。
if(global_var){
tvMsg.setVisibility(View.VISIBLE);
} else{
tvMsg.setVisibility(View.GONE);
}
在此代码中:
alert.setPositiveButton("Send", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EditText editMsg = (EditText)view.findViewById(R.id.editMsg);
String msg = editMsg.getText().toString().trim();
if (!msg.isEmpty()) {
// show message test
if (name.equals("Contact 0")) {
.....
.....
global_var = true// or something;
}
}
}
});
最后称之为:
adapter.notifyDataSetChanged();
我认为这会有效..
答案 1 :(得分:0)
我已经弄明白了。似乎问题在于调用listView.getAdapter()。getView()。
替换为listView.getChildAt(int pos),一切正常。