2017-03-14 2 views
0

그래서 뷰 ​​페이저 내에서 고정 된 2 개의 탭을 사용하는 앱에서 작업하고 있습니다. 나는 RecyclerView 안에 ViewPager을 가지고 있지만, RecyclerView은 수평 스 와이프에 응답하지 않습니다. onInterceptTouchEventonTouchEvent을 무시하여 ViewPager 내의 페이지를 변경하기 위해 스 와이프를 비활성화했습니다. 뷰 페이저의 setFocusable(false)setFocusableInTouchMode(false)을 아무런 소용이 없다고 불렀습니다. 어떤 아이디어?RecyclerView 내의 ViewPager가 작동하지 않습니다.

// 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

뷰어에서 스와핑을 해제해야합니다. 동시에 두 개가 동시에 작동하지 않습니다.

너무 해제 코드

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

뷰 페이지로 사용자 정의 뷰를 만들고 OnTouch를 추가하고 기본 동작을 반환합니다. MyViewPager와 동일한 단계를 따르고 작동해야하는 스 와이프 부울을 사용하지 마십시오. –

0

조각을 사용하여 RecycleView를 표시 할 수 있습니다. 예 : 관리 할 클래스 어댑터를 생성합니다.

그리고 당신은 당신이 필요로하는 모든 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); 
} 

}.

public class HomeFragment extends Fragment { 
public static TabLayout tabLayout; 
public static ViewPager viewPager; 
Menu mMenu; 

public HomeFragment(){ 

} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    setHasOptionsMenu(true); 
    View view = inflater.inflate(R.layout.fragment_layout_home, null); 
    tabLayout = (TabLayout) view.findViewById(R.id.tab_home); 
    viewPager = (ViewPager) view.findViewById(R.id.viewpager_home); 

    if(viewPager != null){ 
     setupViewPager(viewPager); 
    } 

    tabLayout.setTabMode(TabLayout.MODE_FIXED); 
    tabLayout.setupWithViewPager(viewPager); 

    return view; 
} 

private void setupViewPager(ViewPager viewPager){ 
    HomeFragmentAdapter adapter = new HomeFragmentAdapter(getChildFragmentManager()); 
    adapter.addFragment(new ExpenseFragment(), "Expense"); 
    adapter.addFragment(new IncomeFragment(), "Income"); 
    viewPager.setAdapter(adapter); 
} 

T 도움이 될 수 있기를 바랍니다.

관련 문제