如何使用FragmentPagerAdapter android将数据从第一个片段传递到第三个片段

时间:2018-11-28 09:57:33

标签: android android-fragments

我在FragmentPagerAdapter中有3个片段。我可以使用接口将数据从第一个片段传递到第二个片段。但是无法将数据从第一个片段传递到第三个片段。

我尝试使用共享首选项传递数据,但是我不想破坏第一个片段,所以我放置了viewPager.setOffscreenPageLimit(2),然后使第三个片段无法获得共享首选项。

下面是我的带有FragmentPagerAdapter扩展类:

    private static int NUM_ITEMS = 3;
private CharSequence[] title = {"Customer Details", "Activation Details", "Confirmation Details"};

public ActivationPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    switch (position){
        case 0:
            return new Customer_Fragment();
        case 1:
            return new ActivationDetailsFragment();
        case 2:
            return new ActivationSummaryFragment();
    }
    return null;
}

//Return the number of pages
@Override
public int getCount() {
    return NUM_ITEMS;
}

//Return the title of page
@Override
public CharSequence getPageTitle(int position){
    return title[position];
}

例如 我尝试将数据从片段1传递到片段3,但失败并出现错误java.lang.ClassCastException:fragmentone无法转换为fragmentthree

下面是片段一:

public interface OnCustomerFragmentListener{
    void OnCustomerPassData(String data);
}

下面是MainActivity:

@Override
public void OnCustomerPassData(String data) {
    String tag = "android:switcher:" + R.id.viewPager_Activation + ":" + 1;
    ActivationSummaryFragment f = (ActivationSummaryFragment) getSupportFragmentManager().findFragmentByTag(tag);
    f.displayReceivedData(data);
}

下面是片段三:

public void displayReceivedData(String message)
{
    Log.i(TAG, message);
}

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以在加载新片段时设置参数,并可以从bundle中获取该片段的参数。您可以在有寻呼机更改监听器的回调时设置参数。在更改列表器时,您可以设置参数,并且在加载片段时可以获取参数。希望这会帮助你。要获取更多参考,您可以从Google回调文档中获取帮助。

第二种方法可以是LocalBroadCast。在OnScrollChangeListener上,您可以发送广播。

答案 1 :(得分:0)

下面的链接显示了如何在viewpager中的工具与片段之间传递数据。

https://www.journaldev.com/14207/android-passing-data-between-fragments

将数据传递到第二个片段或第三个片段或其他片段的技巧只是更改标签末尾的数字。

@Override
public void sendData(String message) {
    String tag = "android:switcher:" + R.id.viewPager + ":" + 1;//<--change to 2, then can pass data to third fragment
    FragmentTwo f = (FragmentTwo) getSupportFragmentManager().findFragmentByTag(tag);
    f.displayReceivedData(message);
}