在AlertDialog正面按钮上更改textView的可见性

时间:2014-10-19 05:34:41

标签: android listview dialog textview visibility

好吧所以我没有足够的空间来解释这个,但我有一个带有自定义适配器的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不是吗?为什么我不能改变可见度?

2 个答案:

答案 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),一切正常。