2017-07-25 2 views
0

Ich habe eine MainActivity und einige Fragmente darauf.Aktualisieren von ImageView in einem Fragment Android

Ich versuche, ein ImageView in einem Fragment mit Gallery zu ändern. Sobald das Bild ausgewählt ist, wird MainActivity aktualisiert, wodurch die MainActivity wieder in das Standardfragment geändert wird.

Erste Erlaubnis

textViewChangeImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d(TAG,"Select Image executed"); 

      requestPermissions(
        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
        REQUEST_CODE); 



     } 
    }); 

Auf Anfrage Erlaubnis

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    Log.d(TAG,"Select Image Permission executed"); 

    if(requestCode == REQUEST_CODE){ 
     progressDialogUploadDp.setMessage("Uploading..."); 
     progressDialogUploadDp.show(); 

     if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
      Intent intent = new Intent(Intent.ACTION_PICK); 
      intent.setType("image/*"); 
      intent.putExtra("imageUpdate","true"); 
      startActivityForResult(intent,REQUEST_CODE); 
     }else{ 
      Toast.makeText(getActivity(), "No Permission Granted", Toast.LENGTH_SHORT).show(); 
     } 
     return; 
    } 

    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
} 

Auf Tätigkeit Ergebnis

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null){ 

     try { 
     Uri uri = data.getData(); 

     StorageReference filepath = 
       storageReference.child("Photos").child("DPs").child(ID).child("profilepicture.jpg"); 
      InputStream inputStream = getActivity().getContentResolver().openInputStream(uri); 

      Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 
      imageviewpropic.setImageBitmap(bitmap); 

      filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

        progressDialogUploadDp.hide(); 
        progressDialogUploadDp.dismiss(); 


       } 
      }); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 


    } 

vorwärts der Suche nach einer Lösung!

Aktualisiert ---

MainActivity

@Override 
public void onStart() { 
    super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (mAuthListener != null) { 
     mAuth.removeAuthStateListener(mAuthListener); 
    } 
} 

@Override 
protected void onResume() { 
    super.onResume(); 

} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if(savedInstanceState==null) { 
mRef.addValueEventListener(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 
          if (dataSnapshot.hasChild("questioners")) { 
adapter = new SectionStatePagerAdapter(getSupportFragmentManager()); 
            adapter.addFragment(new HomeFragment(), "HomeFragment"); 
            viewPager.setAdapter(adapter); 
}} 
} 
+0

Aktivieren Sie in Ihren Entwicklereinstellungen die Option Aktivitäten nicht beibehalten, da dieses Problem auftreten würde, wenn diese Option aktiviert ist. –

+0

Ja, es ist deaktiviert. –

+0

Geben Sie den Code für die gesamte Aktivität an. Mach auch was Akshay sagt, es könnte helfen – matip

Antwort

1

Zurück Formular Galerie wird onActivityResult dann wird es Aktivität laufen onResume laufen. Sie können also ein FLAG bei onActivityResult setzen und ein IF in onResume machen, um Ihr Fragment zu setzen.

0

Von dem, was Sie gesagt haben, sieht es so aus, als ob Ihre Aktivität die Methode "Create" aufruft und das Standardfragment erneut setzt. Sie können onCreate() nur dann ein neues Fragment erstellen, wenn kein gespeicherter Status vorhanden ist.

+0

Ja, das scheint das Problem zu sein. Ich habe versucht, if (savedInstanceState == null) hinzuzufügen, aber der Standard-Fragment-Code wird immer noch ausgeführt. –

Verwandte Themen