2016-06-18 2 views
0

arraylist로 프래그먼트가있는 프로그램이 있습니다. TabLayout과 함께 사용하고 있습니다. 탭을 제거하면 조각도 제거하려고합니다. 하지만 내 구현에서는 순차적이지 않습니다. 탭 1은 Fragment2 등을 제거합니다. 내가 잘못 가고 있는지 확인하십시오.arraylist에서 조각을 제거 할 수 없습니다

는 MainActivity의에서 onCreate에서이 나는 조각을

 private TabPagerAdapter pagerAdapter; 


    public List<Fragment> fragmentList = new ArrayList<>(); 
    protected void onCreate(Bundle savedInstanceState) { 

      fragmentList.add(NewsFragment.newInstance(Tab1)); 
      fragmentList.add(NewsFragment.newInstance(Tab2)); 
      fragmentList.add(NewsFragment.newInstance(Tab3)); 

    mViewPager = (ViewPager) findViewById(R.id.pager); 

     pagerAdapter = new TabPagerAdapter(getSupportFragmentManager(), fragmentList); 
     mViewPager.setAdapter(pagerAdapter); 

이 내 FragmentStatePagerAdapter입니다 removeFragment 내가 mainactivity이 어디에서 조각을

public class TabPagerAdapter extends FragmentStatePagerAdapter { 


    private List<Fragment> mFragmentList; 
    private List<String> tabTitles = new ArrayList<>(); 


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

    @Override 
    public Fragment getItem(int position) { 

     return mFragmentList.get(position); 
    } 

    public TabPagerAdapter(FragmentManager fm, List<Fragment> fragmentList) { 
     super(fm); 
     mFragmentList = fragmentList; 
    } 

    @Override 
    public int getCount() { 

     return mFragmentList.size(); 
    } 

    public void removeFragment(int tabPosition) { 

     if (!mFragmentList.isEmpty()) { 
      mFragmentList.remove(tabPosition); 

     } 
    } 

} 

으로 onActivity 결과를 제거하기 위해 노력하고있는 곳입니다 추가하는 방법입니다 I 탭을 모두 제거하려고 시도 중입니다 & 조각

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode != RESULT_OK || data == null) 
      return; 
     settingList = (ArrayList<SettingCheckBox>) data.getSerializableExtra(SETTING_CHECK_BOX); 
     for (int i = 0; i < settingList.size(); i++) { 
      if (settingList.get(i).getChecked()) { 
       Log.d("**Checked Item**", String.valueOf(settingList.get(i).getDescription())); 

       String removeTab = String.valueOf(settingList.get(i).getDescription()); 
       Boolean checkedValue = settingList.get(i).getChecked(); 


       if (removeTab.equals("tab1")) { 
       //remove tab 
         tabLayout.removeTab(tab1); 
         //remove fragment 
       pagerAdapter.removeFragment(0); 
         // fragmentList.remove(i); 
         pagerAdapter.notifyDataSetChanged(); 


       } else if (removeTab.equals("tab2")) { 

         tabLayout.removeTab(tab2); 
           pagerAdapter.removeFragment(1); 
         // fragmentList.remove(i); 

         pagerAdapter.notifyDataSetChanged(); 


       } else if (removeTab.equals("tab3")) { 

         tabLayout.removeTab(tab3); 
         pagerAdapter.removeFragment(2); 
        // fragmentList.remove(i); 

         pagerAdapter.notifyDataSetChanged(); 
        } 

답변

0

을 기반으로. 나는 조각을 내가 조각

for (int i = 0; i < fragmentList.size(); i++) { 
if (fragmentList.get(i).equals(frag1)) { 
//found the position so removing it 
pagerAdapter.removeFragment(i); } 
} 
0

변화는 당신 pagerAdapter.removeFragment(mViewPager.getCurrentItem()); to pagerAdapter.removeFragment(correctFragmentPosition);

correctFragmentPosition = 계산 그냥 내 자신의 질문에 대답 removeTab

의 값에
+0

예 그게 내 문제의 위치를 ​​찾을 필요가

경우
public List<Fragment> fragmentList = new ArrayList<>(); private NewsFragment frag1 frag1 = NewsFragment.newInstance("https://www.yahoo.com"); fragmentList.add(frag1); 

이 방법을 추가, 전에서 6 개 탭을 삭제하고 있다면 올바른 조각의 위치를 ​​얻는 방법 한 번? 수정을 확인하십시오. – choman

+0

correctFragmentPosition = removeTab의 값을 기반으로 계산하십시오, 논리에 따라 달라집니다 – NIPHIN

+0

이 문제를 해결할 수 있습니까? 나는 노력했지만 몇 주 후 성공할 수 없다. – choman