1

Я искал решение этой проблемы с двух дней, но не удался. Я просмотрел пейджер, чтобы отобразить информацию о представлении списка в приложении. Когда swiped показывает, детали следующего элемента списка. У меня есть требование просмотра горизонтального списка внутри пейджера просмотра одного элемента. Теперь моя проблема здесь. Когда я хочу пронести этот список горизонтального списка. Весь элемент пейджера получает Swiped. Я также обрабатывал событие «Прикосновение» для моего горизонтального списка, чтобы запретить Размах действие View пейджер, но до сих пор Посмотреть пейджер получает swiped.Please помочь мне, ниже мой кодViewpager disable swipe Проблема при касании горизонтального списка внутри него

CustomViewPager.Java

import com.devpoint.adapter.HorizontalListView; 

import android.content.Context; 
import android.graphics.Rect; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.View; 

public class CustomViewPager extends ViewPager { 

    private boolean scrollDisable = false; 


    public CustomViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     if(scrollDisable) { 
      return false; 
     } else { 
      return super.onInterceptTouchEvent(ev); 
     } 
    } 

    public void disableScroll() { 
     scrollDisable = true; 
    } 

    public void enableScroll() { 
     scrollDisable = false; 
    } 



} 

И это мой один элемент из Посмотреть пейджер пункта

details_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF" > 

     <ScrollView 
      android:id="@+id/scrollviewid" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:padding="2dp" > 

      ------------------------ 

        <android.support.v7.widget.CardView 
         xmlns:card_view="http://schemas.android.com/apk/res-auto" 
         android:id="@+id/cardview" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         android:layout_margin="@dimen/padding_medium" 
         android:background="#FFFFFF" 
         android:clickable="true" 
         android:orientation="vertical" 
         android:padding="35dp" 
         card_view:cardCornerRadius="@dimen/padding_radius" > 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="170dp" 
          android:background="#FFFFFF" 
          android:gravity="center_horizontal" 
          android:orientation="horizontal" > 

          <com.devpoint.adapter.HorizontalListView 
           android:id="@+id/gridview" 
           android:layout_width="match_parent" 
           android:layout_height="match_parent" 
           android:layout_gravity="center" 
           android:columnWidth="60dp" 
           android:horizontalSpacing="10dp" 
           android:numColumns="3" 
           android:padding="10dp" 
           android:stretchMode="columnWidth" 
           android:verticalSpacing="10dp" /> 
         </TableRow> 
        </android.support.v7.widget.CardView> 



     </ScrollView> 



    </RelativeLayout> 

и я перевалено сенсорный элемент для горизонтального Listview Внутри адаптера в

cardview.setOnTouchListener(new OnTouchListener() { 

       public boolean onTouch(View arg0, 
         MotionEvent ev) { 
        switch(ev.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         DetailsViewpagerFragment.viewPager.disableScroll(); 
         //enable swiping 

         scrollview.setEnabled(false); 
         break; 
        case MotionEvent.ACTION_MOVE: 
         DetailsViewpagerFragment.viewPager.disableScroll(); 
         scrollview.setEnabled(false); 
         break; 
        case MotionEvent.ACTION_UP: 
         DetailsViewpagerFragment.viewPager.enableScroll(); 
         scrollview.setEnabled(true); 
         break; 
        } 
        return false; 
       } 

      }); 

Примечание: Я использую фрагменты в Мой Application.Thank You

Любая помощь будет очень очень очень ... благодарностью .

+0

Попробуйте эту ссылку: http://stackoverflow.com/questions/9650265/how-do-disable-paging-by-swiping-with-finger-in-viewpager-but-still-be-able- to-s – KishuDroid

ответ

0

Это код nonSwipeable ViewPager ... надеюсь, он будет работать для вас

public class NonSwipeableViewPager extends ViewPager { 

    public NonSwipeableViewPager(Context context) { 
    super(context); 
    } 

    public NonSwipeableViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
    // Never allow swiping to switch between pages 
    return false; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    // Never allow swiping to switch between pages 
    return false; 
    } 
} 
+0

Спасибо @Abhinav Singh Maurya .. Но когда ACTION_MOVEUP из Horizontal Listview, Viewpager придется прокручивать, будет ли это работать? –

+0

@Harikrishna Я не знаю, что вы должны применить этот код и проверить его. –

+0

Я применил код, но он не работает..viewpager полностью теряет свое действие, но мое требование пока я просматриваю горизонтальный свиток Listview отключается, если не салфетки не работают .thanks @Abhinav –

2

У меня такие же проблемы, как у вас. Надеюсь, еще не поздно ответить на ваш вопрос. Способ, которым я решаю это:

// Declare Variables 
HorizontalListView listView; 
ViewPager viewPager; 
ScrollView scrollListView; 

Нам нужно ниже переменных, чтобы исправить эти проблемы. Мы можем позвонить viewPager в Фрагмент.

listView = (HorizontalListView) findViewById(R.id.your_list_view); 
viewPager = (ViewPager) getActivity().findViewById(R.id.pager); 
scrollListView = (ScrollView) swipeView.findViewById(R.id.your_scrollview_layout_id); 

Теперь реализовать setOnTouchListener:

listView.setOnTouchListener(new View.OnTouchListener() 
{ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) 
     { 
      // disable swiping of ViewPager 
      // disable scrolling of ScrollView 
      viewPager.requestDisallowInterceptTouchEvent(true); 
      scrollListView.requestDisallowInterceptTouchEvent(true); 
     } 
     return false; 
    } 
}); 

Примечание **:

(1) Этот метод не требует, чтобы настроить класс ViewPager.

(2) Отключить ScrollView дает мне лучшую производительность прокрутки в HorizontalListView.

(3) Сначала я Реализую setOnTouchListener в родительского компоновщик из HorizontalListView (как то, что вы сделали), но я не получить желаемый результат. После того, как HorizontalListView реализует setOnTouchListener, он работает хорошо.

Надеюсь, это тоже поможет другим. ^^ v

+0

Это сработало для меня, спасибо – Granjero

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