如果我正确理解了您的问题,则实际上是在执行一些类似“向导”的操作,其中,当您在各个标签之间滑动或选择时,每个步骤都会将信息传递给下一个步骤。
因此,实际上,您的问题是如何在取消选择片段时从片段中获取信息,并在选择片段时将其获取到片段中。
在最简单的级别上,我建议您的活动保存所有信息的“主”副本,并将其传递到选项卡寻呼机适配器中的每个片段中/从中获取。
您将需要某种“域”对象来保存您需要收集的所有信息。每个标签只会更新它关心的信息。
public class WorkData { string information; string subCon;... etc..}您添加了一个实例来将主副本保存到“ tab”活动中:
public class Tab extends ActionBarActivity implements ActionBar.TabListener {... WorkData workData = new WorkData();...然后,我建议您的每个“标签”片段都实现一个简单的接口;就像是:
public interface DataUpdate { void setData(WorkData data); WorkData getData();}每个选项卡片段都将实现此接口,并根据需要更新WorkData。
public class WorkForce extends Fragment implements DataUpdate {... private WorkData workData; // this fragment's "copy" of the data...@Overridepublic WorkData getData() { this.workData.subCon = this.subCon; // Assuming subcon has been updated.. else use txt1.getText(); return this.workData;}@Overridepublic void setData(WorkData workData) { this.workData = workData; // Update this page's views with the workData... // This assumes the fragment has already been created and txt1 is set to a view txt1.setText(workData.subCon); this.subCon = workData.subCon; // Actually could just use subCon in workData, but be aware that workData actually points to the Activity's copy (kinda makes getdata redundant.. but I like symmetry and couldn't be bothered making lots of copies of the object).}然后,您只需要添加代码即可在“ Tab”活动中向后和向前传递数据。
@Overridepublic void onTabSelected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) { int position = tab.getPosition(); DataUpdate dataUpdate = (DataUpdate) TabAdapter.getItem(position); // Pass the master workdata to the selected fragment dataUpdate.setData(this.workData);}@Overridepublic void onTabUnselected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) { int position = tab.getPosition(); DataUpdate dataUpdate = (DataUpdate) TabAdapter.getItem(position); // Update the master workdata from the unselected fragment this.workData = dataUpdate.getData();}@Overridepublic void onTabReselected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) { // This might be pointless, but we'll do it anyway.. int position = tab.getPosition(); DataUpdate dataUpdate = (DataUpdate) TabAdapter.getItem(position); // Pass the master workdata to the selected fragment dataUpdate.setData(this.workData);}这里要注意的重要一点是,每次调用getItem()时,TabPagerAdapter都会创建一个新的片段。这意味着我们将永远不会得到任何更新,因为每次尝试获取该片段时,它都会返回一个新的空片段。我们需要对此进行更改,以便在第一次请求时仍会创建片段,但只能创建一次,以便我们不会继续丢弃我们的工作。
public class TabPagerAdapter extends FragmentStatePagerAdapter { private static final int NUMBER_OF_TABS = 3; private Fragment[] tabList = new Fragment[NUMBER_OF_TABS]; public TabPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { if (tabList[i] != null) { // Return a tab we created earlier.. return tabList[i]; } else { switch (i) { case 0:tabList[0] = Information.newInstance("name");return tabList[0]; case 1:tabList[1] = WorkForce.newInstance("SubCon");return tabList[1]; case 2:tabList[2] = WorkDetailsTable.newInstance();return tabList[2]; } } return null ; } @Override public int getCount() { return NUMBER_OF_TABS; }希望这可以帮助。祝好运 :-)



