如何从活动更新Android片段?

我想根据从互联网下载的数据定期更新片段的显示。 我已经创build了一个定时器和Runnable定期检索这个数据以及片段内的一个方法来更新它,但我似乎无法弄清楚如何获得从片段的活动引用来更新它。

我有以下代码主要是由ADT的Android项目向导生成的:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(tag, "onCreate()::Entering..."); setContentView(R.layout.activity_main); // Set up the action bar. final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Create the adapter that will return a fragment for each of the // primary sections of the activity. mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); // When swiping between different sections, select the corresponding // tab. We can also use ActionBar.Tab#select() to do this if we have // a reference to the Tab. mViewPager .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } }); // For each of the sections in the app, add a tab to the action bar. for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { // Create a tab with text corresponding to the page title defined by // the adapter. Also specify this Activity object, which implements // the TabListener interface, as the callback (listener) for when // this tab is selected. actionBar.addTab(actionBar.newTab() .setText(mSectionsPagerAdapter.getPageTitle(i)) .setTabListener(this)); } 

以下是用于创build选项卡的代码:

  public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. switch (position) { case FRAG1_POS: return Fragment1.newInstance(); case FRAG2_POS: return Fragment2.newInstance(); default: return null; } } 

我曾尝试使用此解决scheme:

如何从活动中更改片段的textView文本

但是我没有片段ID。 我可以创build标签吗? 如果是这样,在这种情况下我该如何做? 其他SOpost提到了Bundles,但是我在创build片段时没有发送数据。 我希望在活动中有数据可用时定期更新片段。

Related of "如何从活动更新Android片段?"

你不能给你的片段一个标签或ID,但你可以在你的片段类上创build一个自定义属性来标记它们。

 switch (position) { case FRAG1_POS: Fragment1 f = Fragment1.newInstance(); f.fragmentType = 1; return f; case FRAG2_POS: Fragment1 f = Fragment1.newInstance(); f.fragmentType = 2; return f; default: return null; } 

什么时候可以通过所有的片段循环,find你需要的

 List<Fragment> allFragments = getSupportFragmentManager().getFragments(); if (allFragments != null) { for (Fragment fragment : allFragments) { Fragment1 f1 = (Fragment1)fragment; if (f1.fragmentType == 1) f1.updateFragmentData(); } } } 

添加一个公共方法到您的片段,将更新您的片段中的数据。 正如你现在有一个参考,你可以从你的活动中调用它。

这是你可以尝试的东西:

既然你提到更新从活动(与检索的数据)的片段,你可以做这样的事情:

在您的Runnable或AsyncTask中,您可以使用检索到的数据更新适配器,并在您的片段中调用适配器上的onDatasetChanged()方法,以便它自动更新视图。

如果在这些片段中有多个片段,则可以定义一个接口,然后让该活动实施它,然后重写该方法。 从活动中的该方法中,更新包含数据的适配器。 你将不得不使静态适配器!

我希望这有帮助!