2015-06-14 42 views
0

我有一個包含ListFragmentTouchListener(SwipeDismissListViewTouchListener)的ViewPager。我修改了ViewPager這樣的:ListView和ViewPager中的SwipeDismissListViewTouchListener

public class CustomViewPager extends ViewPager { 

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

private boolean pagingEnabled = true; 

public void setPagingEnabled(boolean enabled) { 
    pagingEnabled = enabled; 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    if (!pagingEnabled) { 
     return false; // do not intercept 
    } 
    return super.onInterceptTouchEvent(event); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (!pagingEnabled) { 
     return false; // do not consume 
    } 
    return super.onTouchEvent(event); 
    } 
    } 

我禁用ViewPageronOptionsItemSelectedListFragment方法輕掃。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_edit) { 
     CustomViewPager vp = (CustomViewPager) getActivity().findViewById(R.id.pager); 
     vp.setPagingEnabled(false); 
     getListView().requestDisallowInterceptTouchEvent(true); 

    } 
    return super.onOptionsItemSelected(item); 
} 


@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    SwipeDismissListViewTouchListener touchListener = 
      new SwipeDismissListViewTouchListener(
        getListView(), 
        new SwipeDismissListViewTouchListener.DismissCallbacks() { 

         @Override 
         public boolean canDismiss(int position) { 
          return true; 
         } 

         @Override 
         public void onDismiss(ListView listView, int[] reverseSortedPositions) { 
          for (int position : reverseSortedPositions) { 
           removeItem(position); 
          } 

         } 
        } 
      ); 

    getListView().setOnTouchListener(touchListener); 
    // Setting this scroll listener is required to ensure that during ListView scrolling, 
    // we don't look for swipes. 
    getListView().setOnScrollListener(touchListener.makeScrollListener()); 


} 

ViewPager的刷卡被禁止,但我不能運行SwipeDismissListViewTouchListener問題。 我已經測試了這些問題的答案,但不工作我

Nesting Android ViewPager, Swiping ListItems inside a ListView horizontally

ViewPager intercepts all x-axis onTouch events. How to disable?

Capture swipe to dismiss listview gestures in ViewPager

任何解決方案?謝謝

+0

什麼是CustomViewPager的原因?僅適用於swipe2dismiss? – EE66

+0

是的,CustomViewPager是禁用分頁並嘗試運行Swipe2Dismiss – pablogupi

回答

0

我找到了我的錯誤解決方案。 在這個問題中,我回答瞭如何禁用Fabric庫中的onClick方法。 Can I set custom onClick on my timeline using fabric sdk?

該項目是相同的項目是相同的,這個相關的錯誤。 在這種方法中禁用的觀點,可以點擊的,可長按:

//helper method to disable subviews 
    private void disableViewAndSubViews(ViewGroup layout) { 
     layout.setEnabled(false); 
     for (int i = 0; i < layout.getChildCount(); i++) { 
      View child = layout.getChildAt(i); 
      if (child instanceof ViewGroup) { 
       disableViewAndSubViews((ViewGroup) child); 
      } else { 
       child.setEnabled(false); 
       child.setClickable(false); 
       child.setLongClickable(false); 
      } 
     } 
    } 

和禁用方法swipe2dismiss

解決的辦法是添加列表適配器上此線:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final View view = super.getView(position, convertView, parent); 

     //disable subviews to avoid links are clickable 
     ViewTweetUtils.disableViewAndSubViews((ViewGroup) view); 

     //enable root view and attach custom listener 
     view.setEnabled(true); 
     view.setClickable(false); 

     return view; 
    } 

view.setEnabled不僅沒有作品。您必須添加view.setClickable(false)。爲什麼?我不知道,但它的作品。

感謝您的幫助

0

您的問題應該通過幾個簡單的操作來解決。

  • 卸下onInterceptTouch()onTouch()在ViewPager,其不需要 。
  • 如果我不是錯ür短缺調用notifyDatasetChange() 後在onDismiss環路()
  • 進入SwipeTouchListener代碼併爲方向 創建一個子句,以便啓用Ceratain方向(請考慮Google現在的 ,它們只能在一個方向上刷卡)。我猜你的 啓用滑動只爲第一頁和最後一頁,如果不是那麼 想一想,因爲啓用swipe2dismiss中間頁面是 壞ux descion。
+0

SwipeDismissListViewTouchListener對我而言每千次工作一次。我有ListView來檢測SwipeDismissListViewTouchListener ontouch方法並禁用viewpager ontouch。 我遇到的問題是,在ontouch方法中總是或幾乎總是滿足以下條件:case MotionEvent.ACTION_MOVE:{if {mVelocityTracker == null || mPaused} { break; } 有什麼建議嗎?謝謝 – pablogupi