1

私はこのhttps://stackoverflow.com/a/13925130/1634451に似た解決策を見つけようとしていますが、ポスターはR.id.products_list_linearが何であるかを説明していませんでした。置き換えようとしているフラグメントのlinearlayoutのIDとしてR.id.products_list_linearを設定しようとしました。しかし、それは2つのフラグメントを互いに重ね合わせるだけです。ビューページャーでコンテナーのIDを取得する必要があると確信していますが、このIDを取得する方法がわかりません。

編集:明確にするために、ビューページャーのフラグメントを別のフラグメントに置き換えようとしていますが、コードは投稿した回答とほぼ同じように見えますが、R.id.products_list_linearを作成すると、レイアウトを置き換えようとしています。置き換えようとしているフラグメントが、置き換えようとしているフラグメントにオーバーレイされるだけです。

4

2 に答える 2

2

ビューページャー内のフラグメントを置き換える

このカスタマイズされたViewPagerアダプタを試してください。

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;

public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> fragments=null;
private FragmentManager fragmentManager=null;

public ViewPagerAdapter(FragmentManager fragmentManager,List<Fragment> fragments) {
    super(fragmentManager);
    this.fragments=fragments;
    this.fragmentManager=fragmentManager;
}
@Override
public Fragment getItem(int position) {
    return fragments.get(position);
}
@Override
public int getCount() {
    return fragments.size();
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object)
{
    super.setPrimaryItem(container,0,object);
}
@Override
public void notifyDataSetChanged()
{
    super.notifyDataSetChanged();
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
    fragmentManager.executePendingTransactions();
    fragmentManager.saveFragmentInstanceState(fragments.get(position));
}
public void replaceItem(int position,Fragment fragment)
{
    fragments.set(position, fragment);
    this.notifyDataSetChanged();
}
}

引数としてフラグメントを使用してアクティビティから呼び出します。

List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment3.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment4.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment5.class.getName()));
mPagerAdapter=new ViewPagerAdapter(getFragmentManager(), fragments);

viewPager内のビュー/フラグメントを置き換えてから使用する場合は、

mPagerAdapter.replaceItem(2,Fragment.instantiate(this, Fragment5.class.getName()));
于 2013-03-27T05:29:09.577 に答える
0

私は結局、私にとってうまくいった別のアプローチを採用しました。ビューページャーのフラグメントにViewSwitcherを使用しました。

于 2013-04-02T18:03:54.020 に答える