子布局可见性在另一个子布局单击事件中消失

时间:2013-06-18 13:52:03

标签: android android-layout visibility onclicklistener

我的父Linearlayout1包含两个子框架布局:FrameLayout1FrameLayout2

FrameLayout1位于FrameLayout2之上,但仅涵盖FrameLayout2的一半。

我将FrameLayout1替换为某些fragment1,并将FrameLayout2替换为fragment2

现在,当我点击FrameLayout2时,FrameLayout1应该变为不可见。但这种情况并没有发生。

我尝试了以下操作:

userDetails.java

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
view = inflater.inflate(R.layout.userDetails, container, false);

topLayout = (LinearLayout) getActivity().findViewById(R.id.FrameLayout1);

bottomLayout = (LinearLayout) getActivity().findViewById(R.id.FrameLayout2);


view.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) 
{
   topLayout.setVisibility(View.GONE);
}

});

}

我还发现onClick监听器的视图没有被点击。

更新:

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
              android:id="@+id/FrameLayout1"
              android:layout_weight="1"
              android:layout_width="0dp"              
              android:layout_height="match_parent" />

    <LinearLayout
              android:id="@+id/FrameLayout2"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</FrameLayout>

2 个答案:

答案 0 :(得分:2)

您已将OnClickListener设置为整个View而不是bottomLayout。我认为你不能将FrameLayout强制转换为LinearLayout。以下代码在这里工作正常。

final FrameLayout topLayout = (FrameLayout) findViewById(R.id.FrameLayout1);
final FrameLayout bottomLayout = (FrameLayout) findViewById(R.id.FrameLayout2);

bottomLayout.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) 
{
   topLayout.setVisibility(View.GONE);
}
});

答案 1 :(得分:0)

我认为你必须添加到你的FrameLayout2可点击。尝试添加

android:clickable="true"

然后在你的FrameLayout2中的代码setOnClickListener中。顺便说一下,我认为你应该将topLayout和bottomLayout转换为FrameLayout而不是LinearLayout

请注意,您的framelayouts应该是最终的,以便侦听器类可以访问。

希望有所帮助:)