2016-08-09 4 views
0

私は現在、アンドロイドアプリにビューページの実装を使用しています。各断片には、ボタンがあり、写真を撮ってオンラインデータベースにアップロードします。しかし、新しい権限要件のために、私は許可を求める必要がありました。したがって、アップロードを続けるには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) { 

     } 
    }); 
} 
+0

あなたが投稿したコードがあなたの問題に関連していると思いますか?あなたの断片リストをどのように操作するかを教えてはいけませんか? – kalabalik

+0

どのようにrequestPermissionを呼び出しますか?この投稿によるとhttp://stackoverflow.com/questions/33169455/onrequestpermissionsresultnot-being-called-in-dialog-fragmentを見ると、サポートライブラリを1つ呼び出すと、あなたのフラグメントに直接戻ることがわかります。それはあなたのための解決策ですか? – Cata

+0

@KalaBalikフラグメントリストを操作する方法はどういう意味ですか?私のFragmentStatePagerAdapter部分のgetItem()とgetCount()を参照していますか? – Bosen

答えて

0

)私はnotifyDataSetChange(と呼ばれる部分です。基本的には、onResume()メソッドにloadData()メソッドを置いてしまったので、ViewPagerページをそのExtraから取得したページに戻してしまっていました。

関連する問題