2017-03-14 70 views
0

所以我正在研究一个应用程序,该应用程序在视图寻呼机中使用固定的2个选项卡。我在ViewPager中有RecyclerView,但RecyclerView没有响应水平滑动。我禁用了滑动功能,通过覆盖onInterceptTouchEventonTouchEvent来更改ViewPager中的页面。我在视图传呼机上呼叫setFocusable(false)setFocusableInTouchMode(false)无济于事。有任何想法吗?ViewPager中的RecyclerView不工作

// ViewPager code 
    pager = (NoSwipePager) findViewById(R.id.pager); 
    pager.setFocusable(false); 
    pager.setFocusableInTouchMode(false); 
    adapter = new FormTabAdapter(getSupportFragmentManager(), form, editing); 
    pager.setAdapter(adapter); 
    pager.setCurrentItem(0); 
    tabs = (PagerTabStrip) findViewById(R.id.tab_strip); 
    tabs.setTabIndicatorColor(Color.WHITE); 
    tabs.setBackgroundColor(Color.parseColor("#A52A2A")); 
    tabs.setTextColor(Color.WHITE); 

    // RecyclerView code 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(act); 
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    rv.setLayoutManager(linearLayoutManager); 
    ((SimpleItemAnimator) rv.getItemAnimator()).setSupportsChangeAnimations(false); 

    elementsAdapter = new ElementsAdapter(listener, act, new LinkedList<>(elements), editing); 
    rv.setAdapter(elementsAdapter); 

    ItemTouchHelper.Callback callback = new ElementTouchHelper(elementsAdapter); 
    ItemTouchHelper helper = new ItemTouchHelper(callback); 
    helper.attachToRecyclerView(rv); 
+0

你能分享你的xml布局吗? –

回答

0

因此,您需要关闭viewpager swaping,两者不能同时工作。

下面的代码

public class MyViewPager extends ViewPager { 

    private boolean enabled; 

    public CustomViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.enabled = true; // default swipe enable is true 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (this.enabled) { 
      return super.onTouchEvent(event); 
     } 

     return false; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     if (this.enabled) { 
      return super.onInterceptTouchEvent(event); 
     } 

     return false; 
    } 
    // true - enable swipe 
    // false - disable swipe 
    public void setPagingEnabled(boolean enabled) { 
     this.enabled = enabled; 
    } 
} 

viewpager使用过禁用SWIP同时在.xml文件

<package.MyViewPager 
    android:id="@+id/viewPager" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" /> 

使用viewpager使用下面的代码希望这些回答可以帮助你。

如果您将来需要使用这些相同的方法,您可以将其用于recyclerview。

希望这些帮助你。

+0

视图寻呼机扫描已禁用,但RecyclerView仍然无法正常工作。 – techguy9984

+0

将自定义视图作为viewpager在其上添加OnTouch并返回默认行为。请按照与MyViewPager相同的步骤操作,并且不要使用任何滑动的布尔值 –

0

您可以使用fragment来显示RecycleView。 例如: 您将创建一个适配器进行管理。

public class HomeFragmentAdapter extends FragmentPagerAdapter { 
private final ArrayList<Fragment> mFragment = new ArrayList<>(); 
private final ArrayList<String> mFragmentTitle = new ArrayList<>(); 

public HomeFragmentAdapter(FragmentManager fragmentManager){ 
    super(fragmentManager); 
} 

public void addFragment(Fragment fragment, String title){ 
    mFragment.add(fragment); 
    mFragmentTitle.add(title); 
} 

@Override 
public Fragment getItem(int position) { 
    return mFragment.get(position); 
} 

@Override 
public int getCount() { 
    return mFragment.size(); 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return mFragmentTitle.get(position); 
} 

}

,之后我们将增加更多的碎片,其中包括你需要的任何RecycleView。我希望它可以帮助你。

相关问题