2015-09-07 10 views
6

मैं टैबलेआउट और व्यूपेगर का उपयोग कर रहा हूं, पेज के बीच नेविगेट करने के लिए ViewPager को बाएं या दाएं ओर स्वाइप करने के विकल्प के साथ।दृश्य बदलना पेजर स्वाइप दिशा

मेरी समस्या यह है कि मेरा आवेदन आरटीएल आधारित (दाएं से बाएं) है और स्वाइप दिशा उलट दी गई है।

मैं स्वाइप दिशा को डिफ़ॉल्ट से उलट संस्करण में बदलने की कोशिश कर रहा हूं। मैं वेब पर बहुत कुछ खोज रहा हूं और इसे कैसे करना है इसका कोई तरीका नहीं मिल सका।

मैं android.support.v4.view.ViewPager;

उपयोग कर रहा हूँ और यह कैसे मैं viewPager के साथ मेरी TabLayout प्रारंभ है:

// View Page Adapter 
     final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
     final PagerAdapter adapter = new PagerAdapter 
       (getSupportFragmentManager(), tabLayout.getTabCount()); 
     //View Page Adapter Configuration 
     viewPager.setAdapter(adapter); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     viewPager.setOffscreenPageLimit(3); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

सारांश: वर्तमान में, जब मैं बाईं ओर viewPager स्वाइप कर रहा हूँ, यह पता चलता अगला पृष्ठ। आरटीएल में , जब आप दाईं ओर ViewPager को स्वाइप करते हैं, तो यह अगला पृष्ठ दिखाता है।

समझना मुश्किल हो सकता है, लेकिन यहां यह है। सही स्वाइप जब मैं पिछले पृष्ठ दिखाने के लिए सही स्वाइप की जरूरत है अगले पृष्ठ

Swiping right shows the next page

को दर्शाता है।

+0

क्या यह रिवर्स ऑर्डर में 'पेजर एडाप्टर' की सामग्री रखने का मामला नहीं है? – CommonsWare

+2

क्यों न केवल अंतिम आइटम को स्थापित करें? – Chris

+0

@ कॉमन्सवेयर और जब मैं बाएं स्वाइप करता हूं तो क्या होता है? मुझे इसके लिए ऑनक्रॉल लिस्टर बदलने की ज़रूरत नहीं है? (क्रिस के लिए भी यही जवाब) मुझे दृश्य पेजर स्क्रॉलिंग दिशा बदलने की जरूरत है (दाएं स्वाइप करना - अगला पृष्ठ, बाएं - पिछले पृष्ठ को स्वाइप करना)। अब यह उलट है। यदि मैं एक चुनता हूं तो टैब बहुत अच्छा काम कर रहे हैं। viewPager स्वाइप नहीं करता है। – Eliran

उत्तर

-1

मुझे पता है कि यह देर हो चुकी है लेकिन यह एक स्मार्ट सवाल है। @CommonsWare के रूप में यह पेज एडाप्टर में getItem() विधि में आइटम के क्रम को उलटाने का मामला है। लेकिन यह नहीं पहचाना जाता है। जैसा कि आप getitem() विधि में ऑर्डर को उलटते हैं, आपको getPageTitle() विधि में ऑर्डर को भी उलट नहीं करना चाहिए। इस तरह कुछ:

public static class AppSectionsPagerAdapter extends FragmentStatePagerAdapter { 
     public AppSectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        return new page1(); 
       case 1: 
        return new page2(); 
       case 2: 
        return new page3(); 
      } 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return "page 3 title"; 
       case 1: 
        return "page 2 title"; 
       case 2: 
        return "page 1 title"; 
       } 
     } 

     @Override 
     public int getCount() { 
      return 3; 
     } 
    } 

अब मुश्किल हिस्सा आता है। आपको इस सरल विधि का उपयोग करना चाहिए जो अधिकतम इंडेक्स और वर्तमान इंडेक्स का उपयोग करके शून्य आधारित इंडेक्स ऑर्डर को उलट देता है।

public int calculateReverse(int maxIndex,int currentIndex){ 
     return maxIndex-currentIndex; 
    } 

से आप onTabSelected() इस तरह में इस विधि का उपयोग करना चाहिए: ध्यान रखें आप अपने खुद के अधिकतम सूचकांक का उपयोग करना चाहिए हो:

@Override 
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 
     mViewPager.setCurrentItem(calculateReverse(2,tab.getPosition())); 
    } 

दूसरे भाग पेज एडाप्टर पर पेज श्रोता को बदलने के लिए है।

mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       actionBar.setSelectedNavigationItem(calculateReverse(2,position)); // reversing the tab selection 
      } 
     }); 

मैं के रूप में मैं कर सकता हूँ के रूप में वर्णनात्मक होना करने की कोशिश की: एक बार फिर से आप अपने खुद के अधिकतम इंडेक्स नंबर का उपयोग करना चाहिए। उम्मीद है कि यह मदद करता है :)

8

मुझे पहले एक ही समस्या का सामना करना पड़ा लेकिन मुझे लगता है कि मुझे एक अच्छा समाधान मिला है। 1) एक्सएमएल में लीटर करने के लिए अपने TabLayout दिशा बदलें:

<android.support.design.widget.TabLayout 
    android:id="@+id/tl_activity_main" 
    android:layout_below="@id/toolbar_activity_main" 
    android:layoutDirection="ltr" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    style="@style/DisionTabLayout" /> 

2) ViewPager के लिए कस्टम एडाप्टर बनाएँ और तरीकों GetItem (पूर्णांक स्थिति) और getPageTitle (पूर्णांक स्थिति को ओवरराइड):

@Override 
public Fragment getItem(int position) { 
    if (mIsRtlOrientation && mTabs != null && mTabs.length > 0) { 
     return mTabs[mTabs.length - position - 1].getFragment(); 
    } else { 
     return mTabs[position].getFragment(); 
    } 
} 

@Override 
public int getCount() { 
    return mTabs.length; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    if (mIsRtlOrientation && mTabs != null && mTabs.length > 0) { 
     return mTabs[mTabs.length - position - 1].getTitle(); 
    } else { 
     return mTabs[position].getTitle(); 
    } 
} 

3) एडाप्टर को ViewPager पर सेट करें और फिर इस ViewPager को TabLayout पर लागू करें।here

8

यह Viewpager की कड़ी चोट दिशा बदलने के लिए बहुत ही सरल techniqe है -

private void setAdapters() { 
    // initialize adapter 
    mTabsAdapter = new TabsAdapter(getSupportFragmentManager(), mTabs, true); 
    // set adapter to ViewPager 
    vp.setAdapter(mTabsAdapter); 
    // set ViewPager to TabLayout 
    tl.setupWithViewPager(vp); 
    // if RTL orientation, go to last item 
    vp.setCurrentItem(vp.getAdapter().getCount() - 1, false); 
} 

4) मैं एक ब्लॉग पोस्ट जो अधिक जानकारी और पूर्ण कोड शामिल बनाया।

दो सरल कदम का पालन करना पड़ेगा जो,

1. बदलें देखें पेजर के रोटेशन,

viewpager.setRotationY(180); 
हैं

2. फिर टुकड़ा की दिशा बदलने के कंटेनर जो व्यूपर का बच्चा है,

recyclerView.setRotationY(180); 

नोट: मेरे मामले में मैंने रीसायकलव्यू व्यू पेजर के बच्चे के रूप में उपयोग किया है।

यह मेरे लिए 100% काम किया है।

+1

यह व्यूपर –

+1

के अंदर सभी दृश्यों को उलट देता है क्योंकि हो सकता है कि आपने केवल एक बार अपना लेआउट घुमाया हो। आपको दो बार घूमना होगा। एक बार बच्चे लेआउट की तुलना में पैरेंट लेआउट। निश्चित रूप से, यह ठीक से काम करेगा। –

+0

किसी भी विचार को पेजर टिटलेस्ट्रिप में टेक्स्ट को घुमाने के लिए सामान्य रूप से सामान्य रूप से दो बार घूमते समय अपेक्षित व्यवहार प्राप्त होता है .... लेकिन 180 स्विच घुमाने पर पेजर शीर्षक स्ट्रिप केवल शीर्षक पट्टी की मूल दृश्य दिशा लेकिन टेक्स्ट नहीं – skryshtafovych

संबंधित मुद्दे