5

मैं v4 संकुल के साथ Google API 8 (एंड्रॉइड 2.2) का उपयोग कर रहा हूं।लेनदेन के अंदर ViewPager लेनदेन के बाद गायब हो गया .remove() (उदाहरण बनाए रखें?)

मैं एक FragmentActivity एक मेनू जो हमेशा स्क्रीन और एक छोटे से कंटेनर (एक FrameLayout) पर रहता है, जहां एक मैं कई टुकड़े डाल है कि है:

हाय, यहाँ मेरी समस्या है। जब मैं छुपा रहा हूं और टुकड़े दिखा रहा हूं तो मेरा एप्लिकेशन ठीक काम करता है लेकिन सभी टुकड़ों को लोड करने के बाद यह दुर्घटनाग्रस्त हो जाता है क्योंकि मेरे पास उपयोग करने के लिए सीमित स्मृति है। इस मामले में, मुझे दूसरों को लोड करते समय कुछ टुकड़ों को हटाना पड़ा, इसलिए एप्लिकेशन क्रैश नहीं होता है। लेकिन यहां एक और समस्या आती है, मेरे पेजर्स उन्हें हटाने के बाद पुनः लोड नहीं होते हैं, अन्य सभी टुकड़े ठीक काम करते हैं। केवल मेरे पेजर नहीं दिखाते हैं, वे दुर्घटनाग्रस्त नहीं होते हैं, बस गायब हो जाते हैं। यहाँ आप क्या मेरी समस्या के बारे में है की एक संकेत देने के लिए कुछ कोड है:

MyFragmentActivity.java इस लेआउट है: कि FrameLayout में

<LinearLayout 

     ...(some code from menu that doesn't matter) 

     <FrameLayout 
      android:id="@+id/content" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" > 
     </FrameLayout> 
    </LinearLayout> 

, मैं अपने सभी टुकड़े डाल दिया। पेजर टुकड़े उनमें से एक है और उसके लेआउट की तरह दिखता है:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <android.support.v4.view.ViewPager 
     android:id="@+android:id/some_pager" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</LinearLayout> 

और मैं इस सार वर्ग AbstractPagerFragment कार्यान्वित:

:

import java.util.List; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public abstract class AbstractPagerFragment extends Fragment { 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 

     View fragment = inflater.inflate(getLayoutID(), container,false); 
     PagerAdapter mPagerAdapter = initializePager(); 
     ViewPager pager = (ViewPager) fragment.findViewById(getPagerID()); 
     pager.setAdapter(mPagerAdapter); 
     return fragment; 
    } 

    private PagerAdapter initializePager() { 
     PagerAdapter mPagerAdapter = new templateDigital.util.PagerAdapter(getFragmentManager(), getFragments()); 
     return mPagerAdapter; 

    } 

    public abstract List<Fragment> getFragments(); 

    public abstract int getLayoutID(); 

    public abstract int getPagerID(); 

} 

यह मेरा PagerAdapter कि तरह लग रहा है का उपयोग करता है

import java.util.List; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class PagerAdapter extends FragmentPagerAdapter{ 

    private List<Fragment> fragments; 

    public PagerAdapter(FragmentManager fManager, List<Fragment> fragments) { 
     super(fManager); 
     this.fragments = fragments; 
    } 


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


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

    @Override 
    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 
} 

अब, मैं अपने लागू करता हूं AbstractPagerFrag जाहिर:

FragmentTransaction transaction = fragmentManager.beginTransaction(); 
    if (fragmentManager.findFragmentByTag(myTag) == null) { 
     transaction.add(R.id.content,myFragment, myTag); 
    } 

    transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out); 
    hideAllOtherFragments(myTag, transaction); //Here I hide all other fragments, the code is okay. Trust me. 
    transaction.show(myFragment()); 
    transaction.commit(); 
:

import templateDigital.main.R; 
import templateDigital.util.fragments.AbstractPagerFragment; 
import templateDigital.util.fragments.GenericFragment; 
import android.support.v4.app.Fragment; 

public class ConcretePagerFragment extends AbstractPagerFragment { 

    private List<Fragment> fragments; 

    public ConcretePagerFragment() { 
     fragments = new ArrayList<Fragment>(); 
     fragments.add(new GenericFragment(R.layout.concept_page1_fragment)); 
     fragments.add(new GenericFragment(R.layout.concept_page2_fragment)); 
     fragments.add(new GenericFragment(R.layout.concept_page3_fragment)); 

     //GenericFragments is a class that extends Fragments and just inflate a layout with a background image. 
    } 

    @Override 
    public List<Fragment> getFragments() { 
     return fragments; 
    } 

    @Override 
    public int getLayoutID() { 
     return R.layout.pager_fragment; 
    } 

    @Override 
    public int getPagerID() { 
     return R.id.some_pager; // the pager inside the layout 
    } 
} 

ठीक है, अब मैं इसे अपने सामग्री (FrameLayout) इस तरह (myFragment एक PagerFragment है, और myTag एक स्ट्रिंग है कि इसके टैग मेरे द्वारा परिभाषित का प्रतिनिधित्व करता है) से जोड़ने

और यह कैसे मैं इसे हटाने है:

... 
transaction.remove(myFragment); 
... 

लेकिन उसके बाद मैं मेनू में टुकड़ा पर वापस नेविगेट, एक ही विधि मैं पहली बार में इस्तेमाल का उपयोग करते समय इसे फिर से लोड करना चाहिए (कोड abov ई), पेजर अब और नहीं दिखाता है। क्या कोई इसे हल कर सकता है?

यदि आप यह सब पढ़ते हैं, धन्यवाद, आप एक चैंपियन हैं।

+0

यह मेरे लिए काम करता है: http://stackoverflow.com/a/14505469/959086 अपने ऐप में इस कोड को लागू करने का प्रयास करें – Kenumir

उत्तर

0

दरअसल, यदि आप खंडों के साथ व्यूपार्जर को कार्यान्वित करना चाहते हैं, तो आपको एक टैबहोस्ट, एक फ्रेमविटेट और एक व्यूपार्ज जोड़ना चाहिए।

टैबहोस्ट एक टैबड विंडो दृश्य के लिए कंटेनर होगा। इस ऑब्जेक्ट में दो बच्चे हैं: टैब लेबल का एक सेट जिसे उपयोगकर्ता एक विशिष्ट टैब का चयन करने के लिए क्लिक करता है, और फ्रेमलेआउट एक ऑब्जेक्ट है जो उस पृष्ठ की सामग्री प्रदर्शित करता है। और यदि आप एक TabAdapter बनाने के लिए के बाद (है कि आपके PagerAdapter की तरह कुछ है), और mTabsAdapter.addTab बुला और टुकड़ा पैरामीटर

मैं एक post about it, जहां मैं टुकड़े को एकीकृत करने के तरीके की व्याख्या किए गए के रूप में भेजने के द्वारा प्रत्येक टैब के लिए टुकड़े जोड़ने और ViewPager। आशा करता हूँ की ये काम करेगा।

+0

आपको टैबहोस्ट जोड़ने की आवश्यकता क्यों है? आपकी पोस्ट में काफी आवश्यकता नहीं थी क्योंकि इसकी आवश्यकता क्यों है। – Jeremy

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