Видимость дочернего макета исчезла при событии клика другого дочернего макета

Мой родитель Linearlayout1 содержит два дочерних макета фрейма: FrameLayout1 и FrameLayout2.

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>

person My God    schedule 18.06.2013    source источник
comment
можешь поделиться своим xml? или хотя бы его часть   -  person zozelfelfo    schedule 18.06.2013
comment
Если вы хотите, чтобы FrameLayout1 стал невидимым при нажатии FrameLayout2, не должны ли вы использовать setOnClickListener в bottomLayout вместо представления?   -  person PX Developer    schedule 18.06.2013
comment
@ user1455909 - Оба способа не работают. Нажатие на bottomLayout дает NullPointerException, хотя я инициализировал его в OnCreateView.   -  person My God    schedule 18.06.2013


Ответы (2)


Вы установили OnClickListener на весь вид вместо 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);
}
});
person jimmy0251    schedule 18.06.2013
comment
Я также обнаружил, что кликабельна только верхняя часть заголовка bottomLayout. - person My God; 18.06.2013

Я думаю, что вы должны добавить в свой FrameLayout2 кликабельный. Попробуйте добавить

android:clickable="true"

Затем в вашем коде setOnClickListener в вашем FrameLayout2. Кстати, я думаю, что вы должны указать свой topLayout и нижний макет как FrameLayout вместо LinearLayout.

Обратите внимание, что макеты фреймов должны быть окончательными, чтобы класс слушателя мог получить к ним доступ.

Надеюсь, поможет :)

person zozelfelfo    schedule 18.06.2013
comment
Я также обнаружил, что кликабельна только верхняя черная часть заголовка bottomLayout. - person My God; 18.06.2013
comment
Это может быть связано с тем, что у вас есть больше представлений внутри вашего linearlayout, которые должны иметь параметр android:clickable для false - person zozelfelfo; 18.06.2013