컨텍스트 : 나는 렐름에서 얻은 도시 목록을 포함하는 drawerLayout을 가지고 있습니다. ViewPager는 이미 해당 목록을 표시하고 있습니다. 당신은 DrawerLayoutDrawerLayout 내의 Viewpager 새로 고침
문제에서 직접 도시를 삭제할 수 있습니다 나는 DrawerLayout에서 도시를 삭제하면, 내가 mViewPager.getAdapter()를 호출 notifyDataSetChanged의 viewPager가 다시로드되지 않습니다.. drawerLayout은 ViewPager에 표시되기 때문에 닫을 때 다시로드 할 필요가 없으며 ViewPager/Realm은 다시 탐색 할 때 java.lang.ArrayIndexOutOfBoundsException: rowIndex > available rows: 4 > 4
을 반환합니다.
내가 어떻게 해결할 수 있는지에 대한 단서가 있습니까? 그것이 어떻게 작동하는지
정보를 제공 할 목적으로은 여기에 다음 viewPager
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLayoutInflater().inflate(R.layout.fragment_pager, mFrameLayout);
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mPager.addOnPageChangeListener(this);
mAdapter = new FragmentStatePageSupportAdapter(getSupportFragmentManager(), RealmHelper.getStoredCities().size(), this, RealmHelper.getStoredCities());
mPager.setAdapter(mAdapter);
mPager.setOffscreenPageLimit(0);
}
을 포함하는 활동에서 DrawerLayout **
mCityListAdapter = new CityListAdapter(getBaseContext(), RealmHelper.getStoredCities(), new CityListAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
mPager.setCurrentItem(position);
mDrawerLayout.closeDrawers();
}
}, new CityListAdapter.OnItemLongClickListener() {
@Override
public void onItemLongClick(final int position) {
final CharSequence[] items = {getString(R.string.action_delete_city)};
AlertDialog.Builder builder = new AlertDialog.Builder(BaseActivity.this);
builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
RealmHelper.removeCity(RealmHelper.getStoredCities().get(position));
mPager.getAdapter().notifyDataSetChanged();
}
});
builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
builder.setTitle(getString(R.string.delete_city_label));
builder.show();
}
});
들어있는 BaseActivity에서는 ** 수정
나는 getItemPositi 에 불렀다. 그래서 문제는 아닙니다.
The @Override
public int getItemPosition(Object object) {
Log.v("results", "called getitempostion");
return POSITION_NONE;
}
viewPager에서 notifyDataSetChanged()를 호출하면 조각을 다시 만들지 않으므로 조각에 데이터를 새로 고치라고 지시해야합니다. LocalBroadCastManager를 사용하여 조각을 지정하여 데이터를 새로 고칠 수 있습니다. –
멋진 솔루션을 제공합니다. 그래서 LocalBroadcast를 제 위치에 두었습니다. 제대로 작동하지만 어떻게 강제로 재생성합니까? ViewPager를 다시 설치함으로써? 감사합니다 – Isabelle
글쎄, 난 같은 문제가 있었는데 결코 fragmentPager를 강제로 조각을 다시 만들었습니다. –