2016-10-10 5 views
1

У меня есть view, и я хочу показать его, когда я нажимаю кнопку/макет и спрячу его, когда я касаюсь где-то еще. Как мне это сделать? Я написал код в dispatchTouchEvent(Motion Event), и он работает. Но, я думаю, должен быть другой способ сделать это.Как скрыть recyclerview на внешнем событии касания?

+0

Что вы имеете в виду под «View with RecyclerView»? Вы имеете в виду элемент recyclerView? – Umarov

+0

Это означает, что во внутреннем представлении RecyclerView я думаю, что это неважно –

ответ

0

Вы можете заполнить внешнюю часть вашего RecyclerView с помощью другого интерактивного представления и реализовать метод setOnTouchListener для этого представления. Вот пример:

Допустим, мы получили RecyclerView в верхней части нашего RelativeLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="?attr/selectableItemBackground" 
android:clickable="true" 
android:focusable="true"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerView" 
    android:layout_width="match_parent" 
    android:layout_height="300dp" 
    android:scrollbars="vertical" /> 

    <!--View below is just to fill the remaining space. We will use this view to catch outside touch--> 

<View 
    android:id="@+id/outside_detector" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@id/recyclerView" 
    android:clickable="true" 
    android:focusable="true"/> 
</RelativeLayout> 

И мы хотим, чтобы скрыть и показать нашу recyclerview, когда мы щелкаем за пределами RecyclerView:

((View) findViewById(R.id.outside_detector)).setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View arg0, MotionEvent arg1) { 
       if(arg1.getAction() == MotionEvent.ACTION_DOWN){ 
        if(recyclerView.getVisibility() == View.VISIBLE){ 
         recyclerView.setVisibility(View.INVISIBLE); 
        }else{ 
         recyclerView.setVisibility(View.VISIBLE); 
        } 
       } 
       return true; 
      } 
     }); 

Если вы хотите показать recyclerview при нажатии кнопки, просто напишите recyclerView.setVisibility(View.VISIBLE) метод внутри кнопки ClickListener!

Надеюсь, это поможет!

+0

thaks, но если у меня будет много просмотров в этом 'RelativeLayout', создайте еще один' view' для более удобного перехвата событий, правильно ли это? –

+0

Извините, я не понял. Не могли бы вы пояснить, что вы сказали? – Umarov

+0

Я думал, что создание 'view' может иметь некоторые побочные эффекты –

Смежные вопросы