2016-02-22 3 views
0

My ViewPager удалит фрагмент при нажатии кнопки. Но когда я нажимаю delete, я получаю ошибку «canot change tag». Просматривая другие подобные вопросы, это была либо проблема с getItem, либо getCount в PagerAdapter, и я думаю, что моя реализация в порядке. Пожалуйста посоветуй.IllegalStateException: Невозможно изменить тег фрагмента ViewPager

Это фрагмент будет удален

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    displayActivity = (DisplayActivity) getActivity(); 
    initView(); 
} 
Button delete = (Button) getActivity().findViewById(R.id.dont_show_button_1); 
    delete.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      displayActivity.removeCurrentFragment(count-1); 
     } 
    }); 

Мой PagerAdapter является

public class PagerAdapter extends FragmentPagerAdapter { 

long baseId = 0; 
public static List<Fragment> fragmentArrayList = new ArrayList<Fragment>(); 

public PagerAdapter(FragmentManager fm){ 
    super(fm); 
    fragmentArrayList.add(new FragmentOne()); 
    fragmentArrayList.add(new FragmentTwo()); 
    fragmentArrayList.add(new FragmentThree()); 
} 
@Override 
public Fragment getItem(int position) { 
    return fragmentArrayList.get(position); 
} 

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

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

@Override 
public long getItemId(int position) { 
    // give an ID different from position when position has been changed 
    return baseId + position; 
} 

/** 
* Notify that the position of a fragment has been changed. 
* Create a new ID for each position to force recreation of the fragment 
* @param n number of items which have been changed 
*/ 
public void notifyChangeInPosition(int n) { 
    // shift the ID returned by getItemId outside the range of all previous fragments 
    baseId += getCount() + n; 
} 
} 

Это деятельность, которая принимает ViewPager

public class DisplayActivity extends FragmentActivity { 

ViewPager viewPager; 
PagerAdapter pagerAdapter; 
String TAG = "DisplayActivity"; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.db_layout); 

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

    pagerAdapter = new PagerAdapter(getSupportFragmentManager()); 
    viewPager.setAdapter(pagerAdapter); 
} 

public void removeCurrentFragment(int position){ 
    pagerAdapter.fragmentArrayList.remove(position); 
    pagerAdapter.notifyChangeInPosition(1); 
    pagerAdapter.notifyDataSetChanged(); 
    Log.e(TAG, "in removeCurrentFragment"); 
} 

Я получаю сообщение об ошибке:

IllegalStateException: Can't change tag of fragment FragmentTwo{170c98f1 #1 id=0x7f0c006d android:switcher:2131492973:1}: was android:switcher:2131492973:1 now android:switcher:2131492973:3 

ответ

0

Просмотрев свой код, я думаю, что ваше значение счета может быть неправильным.

Button delete = (Button) getActivity().findViewById(R.id.dont_show_button_1); 
delete.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // here 
     displayActivity.removeCurrentFragment(count-1); 
     //change to 
     displayActivity.removeCurrentFragment(adapter.getCount()-1); 
    } 
}); 

Надеюсь, что это поможет. Пожалуйста, разместите весь свой код, как если бы вы получали значение переменной count. Опубликуйте весь код, если решение не решит вашу проблему. См здесь, например: - https://androidruler.wordpress.com/2016/02/22/working-with-viewpager-as-a-images-slider/

+0

Граф просто 1 для фрагмента 1, 2 для фрагмента 2, 3 для фрагмента 3 –

1

Проблема была с

public class PagerAdapter extends FragmentPagerAdapter 

Изменение его

public class PagerAdapter extends FragmentStatePagerAdapter 

включен правильное удаление.

Это может быть отнесено к «FragmentStatePagerAdapter», которое предоставляет представления, которые выходят за пределы текущего и проходящего просмотра. » Как предложено на это сообщение Remove Fragment Page from ViewPager in Android

Смежные вопросы