2012-10-03 18 views
6

के साथ बैकस्टैक का उपयोग करें मैं अपने एंड्रॉइड ऐप में स्वाइपिंग को लागू करने के लिए व्यूपेगर का उपयोग कर रहा हूं। हालांकि, मैं पिछला टुकड़ा दिखाना चाहता हूं जब उपयोगकर्ता गतिविधि को समाप्त करने के बजाय बैक बटन का उपयोग करता है। क्या उसे करने का कोई तरीका है? धन्यवाद सेबस्टियनViewPager

उत्तर

4

अवहेलना अपने Activity की कार्यक्षमता:

public class Activity extends Activity 
{ 
    @Override 
    public void onBackPressed() 
    { 
     // do stuff 
     myFragment.onBackPressed(); 
    } 
} 

public class Fragment extends Fragment 
{ 

    public void onBackPressed() 
    { 
     // do stuff 
    } 
} 
+0

सही, बहुत बहुत धन्यवाद! – Sebastian

4

मैं एक ऐसी ही समस्या थी, यह कैसे मैं इसे हल है। मेरे पास 6 टुकड़े वाले व्यूपेजर थे और इतिहास के इतिहास को ट्रैक रखना चाहते थे और इतिहास में पीछे की ओर नेविगेट करने के लिए बैक बटन का उपयोग करने में सक्षम होना चाहते थे। मैं java.util.Stack<Integer> ऑब्जेक्ट बनाता हूं, इसमें खंड संख्याएं जोड़ें (जब आप बैक बटन का उपयोग करते हैं, नीचे देखें), और onBackPressed() को ओवरराइड करने के लिए इसे वापस स्टैक का उपयोग करने के बजाय अंतिम बार देखा गया टुकड़ा पॉप करने के लिए ओवरराइड करें, जब मेरा इतिहास स्टैक खाली न हो।

जब आप बैक बटन दबाते हैं तो आप स्टैक पर तत्वों को धक्का देने से बचना चाहते हैं, अन्यथा आप दो टुकड़ों के बीच फंस जाएंगे यदि आप अंततः बाहर निकलने के बजाय बैक बटन का उपयोग करते रहें।

मेरे कोड:

MyAdapter mAdapter; 
ViewPager mPager; 
Stack<Integer> pageHistory; 
int currentPage; 
boolean saveToHistory; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mAdapter = new MyAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager)findViewById(R.id.container); 
    mPager.setAdapter(mAdapter); 
    mPager.setOffscreenPageLimit(5); 

    pageHistory = new Stack<Integer>(); 
    mPager.setOnPageChangeListener(new OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int arg0) { 
      if(saveToHistory) 
       pageHistory.push(Integer.valueOf(currentPage)); 
     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
     } 
    }); 
    saveToHistory = true; 
} 

@Override 
public void onBackPressed() { 
    if(pageHistory.empty()) 
     super.onBackPressed(); 
    else { 
     saveToHistory = false; 
     mPager.setCurrentItem(pageHistory.pop().intValue()); 
     saveToHistory = true; 
    } 
}; 
1

मैं एक ही मुद्दा है और मैं इस कदम (मेरा उत्तर संपादित --- निश्चित रूप से, मेरे लिए काम यह एक कोशिश दे)

मुख्य गतिविधि में पालन जहां व्यूपर में 3 खंड हैं, मैं स्टैक और पुश और पॉप डेटा बनाते हैं।

private Stack<Integer> stackkk; 
private ViewPager mPager; 
private int tabPosition = 0; 



    mTabLayout.setupWithViewPager(mPager); 
    mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout)); 
    mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      tabPosition = tab.getPosition(); 
      mPager.setCurrentItem(tab.getPosition()); 

// here i have add the data into the stack in each tab click, as at first it will always be null so i add 0 position 

      if (stackkk.empty()) 
       stackkk.push(0); 

      if (stackkk.contains(tabPosition)) { 
       stackkk.remove(stackkk.indexOf(tabPosition)); 
       stackkk.push(tabPosition); 
      } else { 
       stackkk.push(tabPosition); 
      } 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      tabPositionUnselected = tab.getPosition(); 
     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
     } 
    }); 
} 

और गतिविधि में onBackPressed में,

//OnbackPress i have first taken out the last one as it already and 
//selected by poping it out then only set to the pager. 
@Override 
public void onBackPressed() { 
    if (stackkk.size() > 1) { 
     stackkk.pop(); 
     mPager.setCurrentItem(stackkk.lastElement()); 
    } else { 
    } 
} 

आशा इस मदद या मुझे msg सकता है।

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। –

+0

@ जयप्रकाश सोनी सुझाव के लिए धन्यवाद। मैंने अपना जवाब संपादित कर लिया है। उम्मीद है कि यह दूसरों की मदद कर सकता है –