栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过使用Tab Android Studio(而非按钮)滑动视图将数据传递到另一个片段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过使用Tab Android Studio(而非按钮)滑动视图将数据传递到另一个片段

如果我正确理解了您的问题,则实际上是在执行一些类似“向导”的操作,其中,当您在各个标签之间滑动或选择时,每个步骤都会将信息传递给下一个步骤。

因此,实际上,您的问题是如何在取消选择片段时从片段中获取信息,并在选择片段时将其获取到片段中。

在最简单的级别上,我建议您的活动保存所有信息的“主”副本,并将其传递到选项卡寻呼机适配器中的每个片段中/从中获取。

您将需要某种“域”对象来保存您需要收集的所有信息。每个标签只会更新它关心的信息。

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;        }

希望这可以帮助。祝好运 :-)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号