当从查看寻呼机启动的活动中按下按钮时,如何将数据从一个片段传递到另一个片段。
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);
}
答案 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)
putArguments
和其他片段上的OnScrollChangeListener
。
或者您也可以使用
getArguments
在LocalBroadCast
中将数据从一个片段发送到另一个片段。
答案 2 :(得分:0)
在源片段中实现public getData方法,在Target片段中实现setData方法。
在下一个按钮上单击,找到当前可见的片段并从该片段中获取数据 getSupportFragmentManager()。findFragmentByTag(“android:switcher:”+ getViewPager()。getId()+“:”+ fragmentPagerAdapter.getItemId(position));
之后移动到下一个片段和onPageSelected方法找到下一个可见片段并设置数据
答案 3 :(得分:0)
最简单的方法是使用EventBus库。