मैं 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 ई), पेजर अब और नहीं दिखाता है। क्या कोई इसे हल कर सकता है?
यदि आप यह सब पढ़ते हैं, धन्यवाद, आप एक चैंपियन हैं।
यह मेरे लिए काम करता है: http://stackoverflow.com/a/14505469/959086 अपने ऐप में इस कोड को लागू करने का प्रयास करें – Kenumir