Android - setVisibility不会更改RelativeLayout的可见性

时间:2018-06-19 04:36:14

标签: java android android-studio onclicklistener android-view

我正在尝试使用RelativeLayout属性操纵visibility对某个点击事件的可见性。

在为每个列表项添加事件处理程序后,我可以检查可见性状态是否正在发生变化,但在Android模拟器中,屏幕根本没有变化(我已经使用visibility =&#34进行了测试) ;在XML中可见"以确保它会显示出来。)

这是点击处理程序的代码:

someHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LayoutInflater layoutSeed = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View baseView = layoutSeed.inflate(R.layout.activity_listings, null, false);
            RelativeLayout popup = (RelativeLayout) baseView.findViewById(R.id.popupContainer);
            Log.d("Tag1",Integer.toString(popup.getVisibility()));
            popup.setVisibility(View.VISIBLE);
            Log.d("Tag2",Integer.toString(popup.getVisibility()));
        }
});

Logcat显示状态更改。我还在baseView和popup上尝试invalidate()postInvalidate(),以及popup.bringToFront()及其组合,到目前为止还没有任何工作。

有任何建议或可能的调查路线?

4 个答案:

答案 0 :(得分:6)

如果您尝试更改可见性的RelativeLayout已经在屏幕中,则您不需要再次对其进行充气。请参考已经充气的一个并更改其可见性

Session Config

答案 1 :(得分:2)

Gone将从您的布局中删除视图。使用隐形而不是消失。

答案 2 :(得分:1)

当您点击按钮时,您的视图将被按钮的OnClick(View v)方法替换。 所以你要写下来

v.popup(View.GONE)

答案 3 :(得分:0)

看看这行代码:

View baseView = layoutSeed.inflate(R.layout.activity_listings, null, false);
RelativeLayout popup = (RelativeLayout) baseView.findViewById(R.id.popupContainer);
Log.d("Tag1",Integer.toString(popup.getVisibility()));

实际上,您正在尝试创建新的baseView并将其设置为gone。如果要设置行项gone,则应将其从临时适配器中删除,例如(如果将itemView设置为已消失,则应注意适配器的重新view):

removeItemAt(getAdapterPosition()) 
notifyDataRemoved(getAdapterPosition())