问题描述
问题是这样的:
第一次选择图片时,一切都很好。如果滑动,然后按“后退”按钮,则在打开另一张图像后,将打开将打开的最后一张图像。
正确的位置通过捆绑包传递。我不知道在哪里查找错误。
public class ViewPagerAdapter extends PagerAdapter {
private LayoutInflater layoutInflater;
public ViewPagerAdapter() {
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container,int position) {
layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.image_fullscreen,container,false);
ImageView imageView = view.findViewById(R.id.image_fScreen);
Hit hit = hits.get(position);
Picasso.get().load(hit.getLargeImageURL())
.into(imageView);
container.addView(view);
return view;
}
@Override
public int getCount() {
return hits.size();
}
@Override
public boolean isViewFromObject(@NonNull View view,@NonNull Object object) {
return view == object;
}
@Override
public void destroyItem(@NonNull ViewGroup container,int position,@NonNull Object object) {
container.removeView((View) object);
}
}
DialogFragment:
public class FullScreenDialogFragment extends DialogFragment {
private ArrayList<Hit> hits;
private ViewPager viewPager;
private ViewPagerAdapter viewPagerAdapter;
private TextView author;
private TextView count;
private int selectedPosition;
private Button buttonShare;
private static FullScreenDialogFragment fullScreenDialogFragment;
private int rlyPosition;
public static FullScreenDialogFragment getInstance() {
if (fullScreenDialogFragment == null) {
fullScreenDialogFragment = new FullScreenDialogFragment();
}
return fullScreenDialogFragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_FRAME,R.style.DialogStyle);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.image_viewpager,false);
viewPager = view.findViewById(R.id.viewpager);
author = view.findViewById(R.id.author);
buttonShare = view.findViewById(R.id.btnShare);
count = view.findViewById(R.id.count);
hits = (ArrayList<Hit>) getArguments().getSerializable("hits");
selectedPosition = getArguments().getInt("position");
viewPagerAdapter = new ViewPagerAdapter();
viewPager.setAdapter(viewPagerAdapter);
viewPager.addOnPagechangelistener(onViewPagechangelistener);
setItem(selectedPosition);
return view;
}
private void setItem(int pos) {
viewPager.setCurrentItem(pos,true);
setItemInfo(selectedPosition);
}
private void setItemInfo(int pos) {
count.setText((pos + 1) + " of " + hits.size());
Hit hit = hits.get(pos);
author.setText(hit.getUser());
}
ViewPager.OnPagechangelistener onViewPagechangelistener = new ViewPager.OnPagechangelistener() {
@Override
public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
setItemInfo(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
};
解决方法
我猜问题在这里
private void setItem(int pos) {
viewPager.setCurrentItem(pos,true);
setItemInfo(selectedPosition);
}
您可能正在传递selectedPosition而不是currentPosition
请检查。
,我的问题是在创建DialogFramgent对象。 我以Singlton模式对他进行了处理,并用旧数据进行了调用。
现在在OnClick中,我创建了新对象DialogFramget,他获得了新值。
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fullScreenDialog = new FullScreenDialogFragment();
fullScreenDialog.setArguments(bundle);
fullScreenDialog.show(fragmentTransaction,"");