v4パッケージでGoogle API 8(Android 2.2)を使用しています。私は多くの断片を入れて常に画面と少しコンテナ(でframeLayout)にとどまるメニューを持っているFragmentActivityを持ってフラグメント内のViewPagerがtransaction.remove()の後に表示されなくなる(インスタンスを維持する)
:
こんにちは、ここに私の問題です。私のアプリケーションは、フラグメントを隠して見せてもうまく動作しますが、使用するメモリが限られているため、すべてのフラグメントをロードした後にクラッシュします。この場合、他のアプリケーションをロードするときにフラグメントの一部を削除しなければならなかったので、アプリケーションはクラッシュしません。しかし、ここで別の問題が来る、私のポケベルは私がそれらを削除した後にリロードしない、他のすべての断片は正常に動作します。私のページャだけが表示されない、クラッシュしない、ただ消える。ここではあなたに私の問題が何であるかの手がかりを与えるためにいくつかのコードを行く:
MyFragmentActivity.javaは、このレイアウトを持っている:
<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>
をそのでframeLayoutでは、私はすべての断片を置きます。ページャの断片は、それらの一つであり、そのレイアウトは次のようになります。
<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 MENTは:
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というは私によって定義され、そのタグを表す文字列である)から、それを追加します
そしてこれは、私はそれを削除する方法です:私はメニューにフラグメントに戻って移動した後、それは私が初めてで使用したのと同じ方法を使用して、再ロードする必要がある場合(コードabov
...
transaction.remove(myFragment);
...
しかし、 e)、ページャはもう表示されません。誰でもこれを解決できますか?
これをすべて読んだら、ありがとう、あなたはチャンピオンです。
私のために働く:http://stackoverflow.com/a/14505469/959086あなたのアプリケーションにこのコードを実装してみてください。 – Kenumir