0

すべてのタブに2つのフラグメントがあるタブレイアウトが必要です。1つは最初から最後まで3つのタブで入力を行うことによって完了するタスクの進行状況を示し、もう1つはその進行状況フラグメントの下にあるメインフラグメントです。入力を取ります。

これにより、すべてのタブのタイトルと詳細、タイトルフラグメントが同じ、詳細フラグメント(入力フラグメントはタブごとに異なります)になります。

私は2日間すべての方法を試しました:(

私の解決策 私は、ViewPagerから2つのタブに追加されたメインフラグメントの2つのフレームレイアウトを含むレイアウトを試しました。

public static class ScreenSlidePagerAdapter extends
        FragmentStatePagerAdapter {

    public static ArrayList<Fragment> tabs_fragments = new ArrayList<Fragment>(
            3);

    public ScreenSlidePagerAdapter(FragmentManager fm,
            ArrayList<Fragment> tabs) {
        super(fm);
        ScreenSlidePagerAdapter.tabs_fragments = tabs;

    }

    @Override
    public Fragment getItem(int arg0) {
        return tabs_fragments.get(arg0);
    }

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

    @Override
    public int getItemPosition(Object object) {
        if (tabs_fragments.contains(object)) {
            return POSITION_UNCHANGED;
        }
        return POSITION_NONE;
    }

    public static void setItem(Fragment fr, int position) {
        if (position <= 2 && position >= 0) {
            tabs_fragments.remove(position);
            tabs_fragments.add(position, fr);
        } else
            Log.d("adding tab", "wrong tab position to add fragment at");
    }
}

アクティビティの開始時にこれを行います。さまざまなタブ位置の詳細フラグメントをロードするためにメインフラグメントで使用されるタブ位置を取得するを参照してください。

    mPager = (ViewPager) findViewById(R.id.pager);
    // fragments for pagers
    ArrayList<Fragment> tabs = new ArrayList<Fragment>();
    tabs.add(new FrEventDetails());
    tabs.add(new FrEventDetails());
    tabs.add(new FrRuleSave());
    mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager(), tabs);
    mPager.setAdapter(mPagerAdapter);

    bar = getActionBar();
    bar.setTitle("Add Rule");
    bar.setSubtitle("select event for rule");
    bar.setDisplayShowTitleEnabled(true);
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
    bar.setDisplayHomeAsUpEnabled(true);

    bar.addTab(bar.newTab().setText("Select Event")
            .setTabListener(new TabListener(mPager)));
    bar.addTab(bar.newTab().setText("Select Action")
            .setTabListener(new TabListener(mPager)));
    bar.addTab(bar.newTab().setText("Save Rule")
            .setTabListener(new TabListener(mPager)));

    if (savedInstanceState != null) {
        bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
    }
    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            // When swiping between pages, select the
            // corresponding tab.
            if (bar.getSelectedNavigationIndex() != position)
                bar.setSelectedNavigationItem(position);
            tab = position;
        }

次に、このフラグメントがアクティビティにアタッチされているときに、進行状況レイアウトを追加します(title(1つのフレームレイアウト用で、選択したタブに基づいて、詳細フレームレイアウト用に別のフラグメントを追加します(入力用))。

public class FrEventDetails extends Fragment {
Context context;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = (Context) activity;
    int tab = AddRule1.tab;
    android.app.FragmentTransaction ft = activity.getFragmentManager()
            .beginTransaction();
     ft.add(R.id.fr_rule_progress_container, new FrProgress());

    if (tab == 1) {
        ft.replace(R.id.fr_event_input_container, new FrActionSelect(),
                "cell1_1").commit();
    } else if (tab == 0) {
        ft.replace(R.id.fr_event_action_container, new FrEventSelect(),
                "cell1_2").commit();
    }

}

注*このメインフラグメントのレイアウトは、2つのフレームレイアウトを含む単純なものです。

結果:最初のタブではタイトルと詳細が美しく表示されますが、2番目のタブではメインフラグメントのみが表示され、3番目のフラグメントにスワイプして戻ってくると、2番目のフラグメントは美しく塗りつぶされます(表示の1秒後)が、1番目のフラグメント空になりました。これでどうしたらいいのかわからない。
この2日間の涙の問題の解決策を教えてください

4

1 に答える 1

0
  1. 開始時にすべてのタブを同時に表示するには、PagerOffSetLimitを増やします(この場合、3つのタブの場合は2に)
  2. フラグメントの状態を更新したり、現在のタブの横にあるタブのフラグメントでいくつかのメソッドを呼び出すには、Pager.instantiateItemメソッドを使用します。
    1. 1秒の遅延は、xmlにanimateLayoutChangesがあるためです。
于 2013-03-30T00:00:04.017 に答える