如何在View Pager中将数据从一个片段传递到另一个片段

时间:2017-02-21 12:34:20

标签: android android-fragments android-viewpager

当从查看寻呼机启动的活动中按下按钮时,如何将数据从一个片段传递到另一个片段。

activity_main.xml中

<android.support.v4.view.ViewPager
        android:elevation="@dimen/activity_horizontal_margin"
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v4.view.ViewPager>


    <Button
        android:id="@+id/btn_next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:background="@null"
        android:text="@string/next"
        android:textColor="@android:color/white" />

当我按btn_next时,下一个片段将会显示。如何将前一个片段的数据提取到当前片段?

我有一个片段:

public class BpDetails extends Fragment {

        private int page;

    private EditText systolic;
    private EditText diastolic;

    // newInstance constructor for creating fragment with arguments
        public static BpDetails newInstance(int page) {
            BpDetails fragmentFirst = new BpDetails();
            Bundle args = new Bundle();
            args.putInt("someInt", page);
            fragmentFirst.setArguments(args);
            return fragmentFirst;
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            page = getArguments().getInt("someInt", 0);
        }


        // Inflate the view for the fragment based on layout XML
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            final View view = inflater.inflate(R.layout.bp_details, container, false);

            Log.i("View ",view.toString());


            systolic =(EditText) view.findViewById(R.id.systolic);
            diastolic =(EditText) view.findViewById(R.id.diastolic);


            return view;
        }
}

和页面适配器

public static class MyPagerAdapter extends FragmentPagerAdapter {
        private static int NUM_ITEMS = 4;
        private static int mSelectedPosition;

        public MyPagerAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
            //mSelectedPosition=selectedPosition;
        }

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

        // Returns the fragment to display for that page
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0: // Fragment # 0 - This will show FirstFragment
                    return BasicDetails.newInstance(0);
                case 1:
                    return BpDetails.newInstance(1);
                case 2:
                    return BslDetails.newInstance(2);
                case 3:
                    return Summary.newInstance(3);

                default:
                    return null;
            }
        }

    }

为了澄清我想在用户点击活动中的btn_next时访问另一个片段中的收缩压值。

更新

我试着这样做 在片段中。

  public String getSystolic(){

            return this.systolic.getText().toString();

        }

然后当用户点击下一个按钮

Fragment bpFragment=adapterViewPager.getItem(vpPager.getCurrentItem());

                    if (bpFragment instanceof BpDetails){

                        System.out.println("Current item is "+vpPager.getCurrentItem());

                        Fragment f=adapterViewPager.getInstantiatedFragment(vpPager.getCurrentItem());


                       BpDetails fr = (BpDetails)adapterViewPager.getItem(vpPager.getCurrentItem());

                        String systolicString = fr.getSystolic();

                        Log.i("Systolic is ",systolicString);
                    }

4 个答案:

答案 0 :(得分:0)

活动:

FirstFragment.newInstance(0, "Page # 1");

片段:

public static FirstFragment newInstance(int page, String title) {
    FirstFragment fragmentFirst = new FirstFragment();
    Bundle args = new Bundle();
    args.putInt("someInt", page);
    args.putString("someTitle", title);
    fragmentFirst.setArguments(args);
    return fragmentFirst;
}

更多详情请参阅链接:https://guides.codepath.com/android/ViewPager-with-FragmentPagerAdapter

答案 1 :(得分:0)

<{1}}上的{p> putArguments和其他片段上的OnScrollChangeListener

或者您也可以使用

getArgumentsLocalBroadCast中将数据从一个片段发送到另一个片段。

答案 2 :(得分:0)

在源片段中实现public getData方法,在Target片段中实现setData方法。

在下一个按钮上单击,找到当前可见的片段并从该片段中获取数据 getSupportFragmentManager()。findFragmentByTag(“android:switcher:”+ getViewPager()。getId()+“:”+ fragmentPagerAdapter.getItemId(position));

之后移动到下一个片段和onPageSelected方法找到下一个可见片段并设置数据

答案 3 :(得分:0)

最简单的方法是使用EventBus库。