私は現在、アンドロイドアプリにビューページの実装を使用しています。各断片には、ボタンがあり、写真を撮ってオンラインデータベースにアップロードします。しかし、新しい権限要件のために、私は許可を求める必要がありました。したがって、アップロードを続けるにはonRequestPermissionsResult()を使用する必要があります。以下は写真を撮った後にViewPagerが間違ったページにスナップします
これはViewPager.class(許可が付与された後、Viewpagerでこのメソッドは代わりにフラグメントの1で呼ばれているので)
@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()メソッドを呼び出すための私の試みです。
ただし、私はビューページャーからこの奇妙な動作に気付きます。私が実装した方法はビューホルダーをRecyclerViewからクリックすると、ViewPagerのその位置に入ります。
奇妙な振る舞いは、たとえば、RecyclerViewから2ページ目に入ったことです。次に、4ページ目にスワイプして写真のアップロードボタンをクリックすると、写真が完成した後、2ページ目に戻ります。
なぜですか?どうすれば修正できますか?長い投稿を申し訳ありません。そこに多くの情報を取得しようとしています。おかげ
はEDIT:これは私が
@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();
}
}
}
requestPermissionを呼び出す方法ですと、何か間違ってますか?
編集ポスト:これは私がバグを発見した
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) {
}
});
}
あなたが投稿したコードがあなたの問題に関連していると思いますか?あなたの断片リストをどのように操作するかを教えてはいけませんか? – kalabalik
どのようにrequestPermissionを呼び出しますか?この投稿によるとhttp://stackoverflow.com/questions/33169455/onrequestpermissionsresultnot-being-called-in-dialog-fragmentを見ると、サポートライブラリを1つ呼び出すと、あなたのフラグメントに直接戻ることがわかります。それはあなたのための解決策ですか? – Cata
@KalaBalikフラグメントリストを操作する方法はどういう意味ですか?私のFragmentStatePagerAdapter部分のgetItem()とgetCount()を参照していますか? – Bosen