如何更新我的片段?

时间:2015-03-26 09:17:17

标签: android android-fragments bundle

我将数据从片段传递到另一个片段,但是我有一张地图,我想更新这个片段并且不替换它...这是MainActivity中的代码:

Mapped map = new Mapped();
    final Bundle bundle = new Bundle();
    bundle.putString("Position",one);
    bundle.putString("ID",two);
    map.setArguments(bundle);
    getSupportFragmentManager().beginTransaction().replace(R.id.mapView, map).commit();

每次删除旧片段时...如何更新它而不是替换?

编辑:这是MainActivity的代码:

public class MainActivity extends FragmentActivity implements Connection.SendMessage
{
ViewPager Tab;
TabPagerAdapter TabAdapter;
ActionBar actionBar;


protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TabAdapter = new TabPagerAdapter(getSupportFragmentManager());
    Tab = (ViewPager)findViewById(R.id.pager);
    Tab.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()
    {
     public void onPageSelected(int position)
     {
       actionBar = getActionBar();
       actionBar.setSelectedNavigationItem(position);
     }
     });

    Tab.setAdapter(TabAdapter);
    actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    ActionBar.TabListener tabListener = new ActionBar.TabListener()
    {
        public void onTabReselected(android.app.ActionBar.Tab tab,FragmentTransaction ft)
        {
        }
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
        {
         Tab.setCurrentItem(tab.getPosition());
        }
        public void onTabUnselected(android.app.ActionBar.Tab tab,FragmentTransaction ft)
        {
        }};
    actionBar.addTab(actionBar.newTab().setText("Connessione").setTabListener(tabListener));
    actionBar.addTab(actionBar.newTab().setText("Mappa").setTabListener(tabListener));

}


public void send(String one, String two)
{
    Mapped map = new Mapped();
    final Bundle bundle = new Bundle();
    bundle.putString("Position",one);
    bundle.putString("ID",two);
    map.setArguments(bundle);
    getSupportFragmentManager().beginTransaction().replace(R.id.mapView, map).commit();

}
}

2 个答案:

答案 0 :(得分:0)

片段之间的通信必须通过父FragmentActivity完成,如文档所述:

  

通常,您会希望一个片段与另一个片段进行通信,例如根据用户事件更改内容。所有Fragment-to-Fragment通信都是通过相关的Activity完成的。两个碎片永远不应该直接沟通。

问题是如何刷新ui中的内容。如果调用replace来进行后退导航,则在新片段的OnCreateView中获取父活动的值。如果你使用popbackstack向后导航你应该实现一个接口。如果你将两个片段一起显示,只使用片段活动刷新数据。你可以改变这个:

 getSupportFragmentManager().beginTransaction().replace(R.id.mapView, map).commit();

为此:

MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentById(R.id.test_fragment);
if(myFragment!=null){
    myFragment.update();
}

我会给你一些链接来谈谈这个:

希望你能帮忙

答案 1 :(得分:0)

你可以尝试这个解决方案:

  1. 使用标记Mapped添加myMap

    Mapped map = new Mapped();
    getSupportFragmentManager().beginTransaction().add(R.id.mapView, map, "myMap").commit();
    
  2. Mapped中创建一个名为addData(Bundle data)的方法,然后您可以在需要时通过此方法传递数据。

  3. 数据添加到Mapped
  4. ,然后按以下方式刷新:

    Fragment mapFrg = getSupportFragmentManager()。findFragmentByTag(“myMap”); 。getSupportFragmentManager()的BeginTransaction()分离(mapFrg)。 。getSupportFragmentManager()的BeginTransaction()atach(mapFrg).commit();

  5. 位于Mappde的{​​{1}}中的
  6. 每次检查onCreateView()为空

  7. 希望这有帮助。