拍照后 Viewpager 捕捉到错误的页面

Viewpager snaps to the wrong page after taking a photo

我目前在我的 android 应用程序中使用 Viewpager 实现。在每个片段中,都有一个 按钮 可以拍照并将其上传到在线数据库。但是,由于新的权限要求,我需要请求许可。因此,我需要使用 onRequestPermissionsResult() 来继续上传。

下面是我的实现

这是来自ViewPager.class(因为在授予权限后,Viewpager中的这个方法被调用而不是片段中的那个)

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_TAKE_PHOTO:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //Permission granted to write and read file
                //Get the current fragment
                List<Fragment> fragments = getSupportFragmentManager().getFragments();
                for (Fragment currFragment : fragments) {
                    if (currFragment != null)
                        currFragment.onRequestPermissionsResult(
                                REQUEST_TAKE_PHOTO
                                , permissions
                                , grantResults);
                }
            }
            return;
        default: //Do nothing
            return;
    }
}

这是来自片段本身

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_TAKE_PHOTO:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //Permission granted to write and read file
                uploadImage();
            }
            return;
        default: //Do nothing
            return;
    }
}

这部分

List<Fragment> fragments = getSupportFragmentManager().getFragments();
                    for (Fragment currFragment : fragments) {
                        if (currFragment != null)
                            currFragment.onRequestPermissionsResult(
                                    REQUEST_TAKE_PHOTO
                                    , permissions
                                    , grantResults);
                    }

是我试图找到 正确的片段 单击按钮并调用 OnRequestPermissionResult() 方法。

但是,我从 Viewpager 注意到了这种奇怪的行为。我实现它的方式是从 RecyclerView 单击 Viewholder,然后进入 ViewPager 中的那个位置。

奇怪的行为是,例如,我从 RecyclerView 进入第 2 页。然后我滑动到第4页并点击上传照片按钮,照片完成后(通过内置相机应用程序),它会切换回第2页

这是为什么?我如何解决它?抱歉,冗长 post。只是想从那里获取尽可能多的信息。谢谢

编辑:这就是我调用 requestPermission

的方式
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != Activity.RESULT_OK) {
        return;
    }
    if (requestCode == REQUEST_TAKE_PHOTO) {
        //Request for permission to access file
        if (ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            //ask for permission
            ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    REQUEST_TAKE_PHOTO);
        } else {
            uploadImage();
        }
    }
}

有什么问题吗?

编辑 Post:这是我调用 notifyDataSetChange()

的部分
private void loadData() {
    mRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            ArrayList<RouteInstructions> mList2 = new ArrayList<RouteInstructions>();

            for (DataSnapshot instructions : dataSnapshot.getChildren()) {
                mList2.add(instructions.getValue(RouteInstructions.class));
            }
            mList = mList2;
            mAdapter.notifyDataSetChanged();
            mPager.setCurrentItem(getIntent().getIntExtra(EXTRA_INDEX, 0));
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

我发现了错误。基本上,我错误地将 loadData() 方法放在 onResume() 方法中,因此将 Viewpager 页面设置回从 Extra 获得的页面。