将数据从一个片段传递到另一个片段更改ViewPager Fragment的内容(在ViewPager内)

时间:2017-01-22 19:22:41

标签: android replace android-viewpager fragment

我开发了一个应用程序,它可以帮助我管理我的财务状况。所以现在我有一个TabLayout,它连接到一个ViewPager。此ViewPager的适配器如下所示:

    package de.financeplanner.util.adapter.pager;

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

import de.financeplanner.fragment.BaseListFragment;

/**
 * Dient als Adapter für den ViewPager
 * Diese Klasse wird an ein TabLayout gebunden um so bei einem
 * Tabwechsel den ViewPager zu updaten.
 * Created by Christian on 20.01.2017.
 */

public class PagerAdapter extends FragmentPagerAdapter {

    private static final int PAGE_COUNT = 4;

    private final String tabTitles[] = new String[] { "Übersicht", "Einnahmen", "Ausgaben", "Kategorie" };

    public PagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        BaseListFragment fragment = new BaseListFragment();
        Bundle startCondition = new Bundle();
        final String arg = "startCondition";
        switch(position){
            case PagerTabConstants.OVERVIEW:  startCondition.putInt(arg, PagerTabConstants.OVERVIEW);
                            break;
            case PagerTabConstants.REVENUES:  startCondition.putInt(arg, PagerTabConstants.REVENUES);
                            break;
            case PagerTabConstants.EXPENSES:  startCondition.putInt(arg, PagerTabConstants.EXPENSES);
                            break;
            case PagerTabConstants.CATEGORY:  startCondition.putInt(arg, PagerTabConstants.CATEGORY);
                            break;
        }
        fragment.setArguments(startCondition);
        return fragment;
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles[position];
    }

}

现在,您可以在Item上的BaseListFragment内单击,然后应加载一个新的Fragment,并将来自单击的Item的数据传递给新的Fragment。 这是我的问题。我知道,我如何将数据传递给片段,但是如何用新片段替换旧片段?因为Tab内的Fragment是由FragmentPagerAdapter加载的。 为了更好地理解,我已经为您提供了这张图片:

MainActivity TabLayout

1 个答案:

答案 0 :(得分:0)

当您点击现有片段中的某个按钮时,请调用主活动中可以替换您片段的方法。

MainActivity parentActivity = (MainActivity) getActivity();
parentActivity.changeFragment();

然后在MainActivity中调用changeFragment方法,该方法可以更改片段或替换它。