2016-08-09 1 views
0

을 촬영 한 후 잘못된 페이지에 스냅. 각 조각에는 단추가있어 사진을 찍어 온라인 데이터베이스에 업로드합니다. 그러나 새로운 권한 요구 사항으로 인해 허가를 요청해야했습니다. 따라서 업로드를 계속하려면 onRequestPermissionsResult()을 사용해야합니다. 다음은 Viewpager 내가 현재 내 안드로이드 응용 프로그램에서 <strong>Viewpager</strong> 구현을 사용하고 사진

이이 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에서이 이상한 동작을 확인할 수 있습니다. 방법은 나는 내가 ViewPager에서 그 위치를 입력 한 다음 RecyclerView,에서 Viewholder을 클릭한다는 것이다 구현했습니다.

이상한 행동은 예를 들어 RecyclerView에서 2 페이지를 입력 한 것입니다. 사진은 (인 - 빌드 카메라 응용 프로그램을 통해) 완료 후 그럼, 그것은

그 이유는 2 페이지로 전환됩니다, 4 페이지에 슬쩍와 사진 업로드 버튼을 클릭? 어떻게 수정해야합니까? 긴 게시물을 유감으로 생각합니다. 그냥 많은 정보를 얻으려고 노력하는 것뿐입니다. 감사합니다

편집 : 나는

@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에게 전화하는 방법이 무엇입니까?

편집 포스트 : 이것은 제가 버그를 발견 한 나는 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) { 

     } 
    }); 
} 
+0

게시 한 코드가 귀하의 문제와 관련 있다고 생각되는 이유는 무엇입니까? 파편 목록을 조작하는 방법을 보여 주면 안 될까요? – kalabalik

+0

requestPermission은 어떻게 호출합니까? 이 게시물 http://stackoverflow.com/questions/33169455/onrequestpermissionsresult-not-being-called-in-dialog-fragment에서 볼 수 있듯이 지원 라이브러리를 호출하면 직접 조각을 가리 킵니다. 그게 당신을위한 해결책입니까? – Cata

+0

@KalaBalik 조각 목록을 조작하는 방법은 무엇을 의미합니까?내 FragmentStatePagerAdapter 부분의 getItem() 및 getCount()를 참조하고 있습니까? – Bosen

답변

0

입니다. 기본적으로 onResume() 메서드에 loadData() 메서드를 넣는 실수를 했으므로 ViewPager 페이지를 해당 Extra에서 가져온 것으로 다시 설정합니다.