我目前在我的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页。
这是为什么?我如何解决它?抱歉,冗长的帖子。只是想从那里获取尽可能多的信息。谢谢
编辑:这就是我所谓的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();
}
}
}
有什么事吗
编辑帖子:这是我称为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获得的页面。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句