我目前使用具有「swipey的選項卡」和使用以下PagerAdapter的應用程序的工作:使用viewpager時如何與碎片進行通信?
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new HomeFragment();
case 1:
return new ListFragment();
case 2:
return new ChartFragment();
}
return null;
}
@Override
public int getCount() {
return 3;
}
}
我使用下面的代碼從主活動我的片段之一進行通信:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1)
{
if (resultCode == Activity.RESULT_OK)
{
String className = data.getExtras().getString("class_name");
if (className.trim().length() > 0) {
HomeFragment homeFrag = (HomeFragment) getSupportFragmentManager().findFragmentById(R.id.home_fragment);
if(homeFrag != null) {
Log.d("MainActivity", "homeFrag is not null");
homeFrag.newClass(className);
}else{
Log.d("MainActivity", "homeFrag is null");
HomeFragment newFragment = new HomeFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.home_fragment, newFragment);
transaction.commit();
newFragment.newClass(className);
}
addSubjectToDataBase(className);
}
}
}
}
我的問題是,當我嘗試與主要活動的片段進行通信時,我似乎同時獲得多個片段。當我改變屏幕的方向或重新開始活動時,我得到了片段的修改版本,但是當我來回滑動查看片段時,我得到舊的未修改版本的片段。片段管理器似乎沒有註冊由適配器創建的片段,因爲儘管我知道這些片段已經創建,片段管理器總是返回一個空歸零片段。
我應該如何避免這個問題,以及與主要活動中的片段進行通信的最佳方式是什麼?
爲什麼使用'OnActivityResult()'? – Jibbo
我正在更新片段的信息來自另一個按下添加按鈕時啓動的活動的用戶輸入。 – Matthias