通过 FragmentPagerAdapter 将数据从 Activity 传递到 ViewPager 的 Fragment

德米特里博伊科

如何将数据发送到 from Activityto Fragmentof ViewPagervia FragmentPagerAdapter

谢谢!

应用兼容活动

public class UnitDetailsActivity extends AppCompatActivity {

  private ViewPager viewPager;

   @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_unit_details);


 viewPager = (android.support.v4.view.ViewPager)findViewById(R.id.container);

  // Getting unitID  via and pass it to Fragment ???
  int unitID = getIntent().getStringExtra("SelectedUnitDeviceId");
  // And how to pass it to Fragment?      

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        adapter = new ViewPagerUnitDetailsAdapter(this.getSupportFragmentManager());
        fragmentReportHauls = new FragmentReportHauls();
        fragmentReportsDowntime = new FragmentReportsDowntime();

        adapter.addFragment(fragmentReportHauls);
        adapter.addFragment(fragmentReportsDowntime);

        viewPager.setAdapter(adapter);

}
}

FragmentPagerAdapter

public class ViewPagerUnitDetailsAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();

    public ViewPagerUnitDetailsAdapter (FragmentManager manager) {
        super(manager);
    }

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

    public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0){
            // How to pass here unitID ???
            return FragmentReportHauls.newInstance(????);
        }
        else {
            return FragmentReportsDowntime.newInstance(???);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        if(position == 0){
            return FragmentReportHauls.PAGE_TITLE;
        }
        else {
            return FragmentReportsDowntime.PAGE_TITLE;
        }
    }
}

ViewPager 片段

public class FragmentReportHauls extends Fragment {

    public static final String PAGE_TITLE = "Shift";

    private final String unitID;

    public FragmentReportHauls() {
    }

    // Here I want to get unitID
    public static FragmentReportHauls newInstance(String unitID) {
        FragmentReportHauls fragment = new FragmentReportHauls();
        this.unitID = unitID;
        return fragment;
    }


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


        return view;
    }
}
}
德米特里博伊科

好的。我找到了解决方案。

应用兼容活动

public class UnitDetailsActivity extends AppCompatActivity {

  private ViewPager viewPager;

   @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_unit_details);


 viewPager = (android.support.v4.view.ViewPager)findViewById(R.id.container);

  // Getting unitID  via and pass it to Fragment ???
  int unitID = getIntent().getStringExtra("SelectedUnitDeviceId");
  // And how to pass it to Fragment?      

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        adapter = new ViewPagerUnitDetailsAdapter(this.getSupportFragmentManager());
        fragmentReportHauls = new FragmentReportHauls();
        fragmentReportsDowntime = new FragmentReportsDowntime();

        adapter.addFragment(fragmentReportHauls, unitID);
        adapter.addFragment(fragmentReportsDowntime, unitID);

        viewPager.setAdapter(adapter);

}
}

FragmentPagerAdapter

public class ViewPagerUnitDetailsAdapter extends FragmentPagerAdapter {

     private final String unitID;

    private final List<Fragment> mFragmentList = new ArrayList<>();

    public ViewPagerUnitDetailsAdapter (FragmentManager manager) {
        super(manager);
    }

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

    public void addFragment(Fragment fragment, String unitID) {
        mFragmentList.add(fragment);
        this.unitID = unitID;
    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0){           
            return FragmentReportHauls.newInstance(this.unitID);
        }
        else {
            return FragmentReportsDowntime.newInstance(this.unitID);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        if(position == 0){
            return FragmentReportHauls.PAGE_TITLE;
        }
        else {
            return FragmentReportsDowntime.PAGE_TITLE;
        }
    }
}

ViewPager 片段

public class FragmentReportHauls extends Fragment {

    public static final String PAGE_TITLE = "Shift";

    private final String unitID;

    public FragmentReportHauls() {
    }

    // Here I want to get unitID
    public static FragmentReportHauls newInstance(String unitID) {
        FragmentReportHauls fragment = new FragmentReportHauls();
        this.unitID = unitID;
        return fragment;
    }


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


        return view;
    }
}
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android-将数据从AsyncTask传递到Activity

如何将Activity传递给Fragment中的newInstance

将Intent数据从Activity传递到Class

android-将数据从活动传递到ViewPager中的片段

将数据从Activity传递到JobService

从BottomSheetDialogFragment传递或监听数据到Fragment

无法使用ViewPager和FragmentPagerAdapter访问Fragment的视图

将变量从MainActivity传递到另一个Activity到选项卡Fragment

Android存储库模式:如何将额外的数据传递给Fragment / Activity

将数据从Activity传递到Fragment不会显示任何内容

Android在Activity和Fragment之间传递数据

使用DownloadManager从Activity将数据传递到BroadcastReceiver

将ArrayList从Fragment类传递给Activity

从AsyncTask发送数据到Fragment(Not Activity)

使用ViewPager将数据从Activity传递到片段

将数据从Activity传递到Fragment(通过访问来自fragment的Activity),从而给出Class Cast Exception

将数据从 Activity 传递到没有 onCreate 的片段

将`SharedPreferences` 数据从 Fragment 传递到 Activity

将数据从 Recyclerview 适配器传递到 Fragment

如何通过解决错误“Activity 无法转换为 Fragment”将 Fragment 传递给类构造函数?

在 Viewpager Tablayout 中将数据从 Activity 传递到 Fragment

单击 Fragment 在 Activity 中通过

如何将参数从 Activity 传递到 Fragment 中的函数

如何使用 OnFragmentInteractionListener 将数据从 Activity 传递到片段

将接口从 Activity 传递到 Fragment

onActivityResult 从 Activity 到 Fragment

如何将数据从 RecyclerView onItemClick 传递到 Activity TabLayout

如何使用 ViewPager2 将数据从 Activity 发送到 Fragment?

这种通过接口将数据从 Activity 传递到 Fragment 的方法如何在幕后工作?