-1

私はViewPagerに2ページありますFragmentのいずれかをViewPagerから削除してFragmentViewPagerに追加するにはどうすればよいですか?Android - ViewPagerからフラグメントを削除してから追加しますか?

私はコードの下に書きましたが、動作しません:

ここ
public class MainActivity extends AppCompatActivity implements WorkTableFragment.listenerLogin { 

    @BindView(R.id.tabsMainActivity) 
    TabLayout tabsMainActivity; 
    @BindView(R.id.viewpagerMainActivity) 
    ViewPager viewPagerMainActivity; 
    private ViewPagerAdapter adapter; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ButterKnife.bind(this); 

     setupViewPager(viewPagerMainActivity); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new WorkTableFragment(), getString(R.string.workTable)); 
     adapter.addFragment(MouFragment.newInstance(langID, lang), getString(R.string.mou)); 
     viewPager.setAdapter(adapter); 
     tabsMainActivity.setupWithViewPager(viewPager); 
     viewPager.setCurrentItem(1); 
    } 


    @Override 
    public void isLogin(LoginModel result) { 
     int position = viewPagerMainActivity.getCurrentItem(); 
     adapter.addRemoveFragment(new LoggedInFragment(), getString(R.string.workTable), position); 
     adapter.notifyDataSetChanged(); 

    } 

    private class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     void addRemoveFragment(Fragment fragment, String title, int index) { 
      mFragmentList.remove(index); 
      mFragmentTitleList.remove(index); 
      mFragmentList.add(index, fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public int getItemPosition(Object object) { 
      return super.getItemPosition(object); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 

    @Override 
    protected void attachBaseContext(Context newBase) { 
     super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
    } 
} 

私は特定のFragmentを削除し、別のFragmentを追加する必要があります。

@Override 
public void isLogin(LoginModel result) { 
    int position = viewPagerMainActivity.getCurrentItem(); 
    adapter.addRemoveFragment(new LoggedInFragment(), getString(R.string.workTable), position); 
    adapter.notifyDataSetChanged(); 

} 

は、ここで私は位置0からWorkTableFragmentを削除し、位置0にLoggedInFragmentを追加する必要があります。

+0

フラグメントを追加した後に、メソッド 'addRemoveFragment'の中から' notifyDataSetChanged() 'を呼び出すことを試みてください。 – Ricardo

+0

frameLayoutだけを含むBridgeFragmentを作成してフラグメントに置き換えることができますあなたはほしいと思う –

+0

サンプルコードを書いてください。ありがとう。 –

答えて

0

この場合notifyDataSetChanged()は、あなたが

void addRemoveFragment(Fragment fragment, String title, int index) { 
      mFragmentList.set(index, fragment); 
     } 
「をLoggedInFrament」を直接のよう

@Override 
public void isLogin(LoginModel result) { 
    int position = viewPagerMainActivity.getCurrentItem(); 
    adapter.addRemoveFragment(new LoggedInFragment(), getString(R.string.workTable), position); 
    viewPager.setAdapter(adapter); 
    tabsMainActivity.setupWithViewPager(viewPager); 
    viewPager.setCurrentItem(yourLastItemPosition); 

} 

セット「addRemoveFragmentを()」再び全体のアダプタを設定し、最後に開いた項目を設定する必要が 動作しません。

+0

働いていない。 –

+0

私の更新された答えを確認してください –

+0

Hmmmm。働いていない。 –

関連する問題