ViewPager和ImageGallery

问题描述

问题是这样的:

第一次选择图片时,一切都很好。如果滑动,然后按“后退”按钮,则在打开另一张图像后,将打开将打开的最后一张图像。

正确的位置通过捆绑包传递。我不知道在哪里查找错误

    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,"");

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...