我将数据从片段传递到另一个片段,但是我有一张地图,我想更新这个片段并且不替换它...这是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();
}
}
答案 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)
你可以尝试这个解决方案:
使用标记Mapped
添加myMap
:
Mapped map = new Mapped();
getSupportFragmentManager().beginTransaction().add(R.id.mapView, map, "myMap").commit();
在Mapped
中创建一个名为addData(Bundle data)
的方法,然后您可以在需要时通过此方法传递数据。
Mapped
后,然后按以下方式刷新:
Fragment mapFrg = getSupportFragmentManager()。findFragmentByTag(“myMap”); 。getSupportFragmentManager()的BeginTransaction()分离(mapFrg)。 。getSupportFragmentManager()的BeginTransaction()atach(mapFrg).commit();
Mappde
的{{1}}中的每次检查onCreateView()
为空
希望这有帮助。