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

Posted

技术标签:

【中文标题】在 AlertDialog 正按钮上更改 textView 的可见性【英文标题】:Change visibility of textView on AlertDialog positive button 【发布时间】:2014-12-14 09:00:01 【问题描述】:

好的,所以我没有足够的标题空间来解释这一点,但我有一个带有自定义适配器的 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 时更改 adapter.getView 中的可见性

似乎一切都是正确的,它的 v 是正确的视图,我可以阅读其他子视图来确认它的正确性,setText 工作但 setVisibility 不是?为什么我不能更改可见性?

【问题讨论】:

到底是什么问题??您的文字现在是否可见或者// 首先,检查您的文本颜色和列表视图背景颜色是否不同.. 问题是它不会变得可见。颜色不是问题。不过感谢您的回复。 您必须在适配器的setVisibility() 中添加getView() 我已经尝试过了(如前所述)。我还可以在列表 view.onitemclicked 事件的子视图中更改线性布局的可见性......我对此感到非常困惑。 【参考方案1】:

我想通了。似乎问题在于调用 listView.getAdapter().getView()。

替换为 listView.getChildAt(int pos) 一切正常。

【讨论】:

【参考方案2】:

因为,当适配器调用 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();

我认为这会起作用..

【讨论】:

我试过这个。不工作。我忘了提到我正在尝试以相对布局将此文本视图覆盖在图像视图上。也许这就是问题所在,今天将进行更多测试。

以上是关于在 AlertDialog 正按钮上更改 textView 的可见性的主要内容,如果未能解决你的问题,请参考以下文章

AlertDialog 更改片段中的背景颜色 [重复]

Android:如何设置AlertDialog的宽度和高度,以及AlertDialog风格的按钮?

如何动态更改 AlertDialog 的布局和字段

带有肯定按钮并验证自定义 EditText 的 AlertDialog

使用Alertdialog更改后面的文本视图

Android AlertDialog 在每个请求上动态更改文本