Ich verwende derzeit eine Viewpager Implementierung in meiner Android App. In jedem Fragment befindet sich eine Schaltfläche, die ein Foto aufnimmt und es in eine Online-Datenbank hochlädt. Aufgrund der neuen Berechtigungsanforderungen musste ich jedoch um Erlaubnis bitten. Daher müsste ich den onRequestPermissionsResult() verwenden, um den Upload fortzusetzen.Viewpager rastet nach dem Fotografieren auf der falschen Seite ein
Unten ist meine Implementierung
dies vom ViewPager.class (Da nach Genehmigung erteilt wird, diese Methode in der Viewpager anstelle des einen in das Fragment genannt wird)
@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;
}
}
diese wird aus dem Fragment selbst
@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;
}
}
diese Teil
List<Fragment> fragments = getSupportFragmentManager().getFragments();
for (Fragment currFragment : fragments) {
if (currFragment != null)
currFragment.onRequestPermissionsResult(
REQUEST_TAKE_PHOTO
, permissions
, grantResults);
}
ist mein Versuch, das korrekte Fragment zu finden, die auf die Schaltfläche geklickt und rufen Sie die OnRequestPermissionResult() Methode.
Allerdings bemerke ich dieses seltsame Verhalten von Viewpager. Die Art, wie ich es implementiert habe, ist, dass ich auf einen Viewholder von einem RecyclerView klicke, der dann diese Position im ViewPager eingibt.
Das seltsame Verhalten ist, dass zum Beispiel Seite 2 von der RecyclerView eingegeben. Dann wische ich auf Seite 4 und klicke auf die Schaltfläche Foto hochladen, nachdem das Foto fertig ist (über die integrierte Kamera-App), wird auf Seite 2 zurückgeschaltet.
Warum ist das? Wie repariere ich es? Entschuldigung für einen längeren Post. Ich versuche nur, so viele Informationen da draußen zu bekommen. Dank
EDIT: Das ist, wie ich die requestPermission nennen
@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();
}
}
}
Stimmt etwas nicht?
Edit Post: Dies ist der Teil, wo ich die notifyDataSetChange genannt()
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) {
}
});
}
Woran denken Sie, dass der von Ihnen gepostete Code für Ihr Problem relevant ist? Sollten Sie uns nicht zeigen, wie Sie Ihre Fragmentliste manipulieren? – kalabalik
Wie rufen Sie requestPermission auf? Nach diesem Beitrag http://StackOverflow.com/Questions/33169455/onrequestpermissionsresult-not-being-in-dialog-fragment können Sie sehen, dass, wenn Sie die Support-Bibliothek aufrufen, es direkt auf Ihr Fragment verweist .. Ist das eine Lösung für dich? – Cata
@KalaBalik Was meinst du damit, wie ich Fragmente Liste manipuliere?Beziehen Sie sich auf den getItem() und den getCount() in meinem FragmentStatePagerAdapter-Teil? – Bosen