Ich habe einen ViewPager mit zwei Fragmenten. Was ich machen will; was ich vorhabe zu tun;Wie kann ich die Ansichten eines anderen Fragments in ViewPager ändern?
Ändern Sie das Bild eines ImageView und ändern Sie einige Eigenschaften eines TextView von einem anderen Fragment.
Ich habe versucht, dies zu tun:
Das in meinem SettingsFragment.java ist. Von diesem Fragment möchte ich einige Ansichten von CalculatorFragment ändern. Die OnActivityResult-Methode wird aufgerufen, wenn der Benutzer ein Bild aus der Galerie auswählt. Wenn diese Methode aufgerufen wird, speichere ich dieses Bild und rufe dann die Callback-Methode auf, damit MainActivity weiß, dass der Benutzer ein neues Bild aus der Galerie auswählt.
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == getActivity().RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
try {
imageSaver.save(MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), data.getData()));
} catch (IOException e) {
e.printStackTrace();
}
settingsFragmentCallback.newMessage(NEW_PICTURE);
}
}
}
public interface SettingsFragmentCallback{
void newMessage(String message);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
settingsFragmentCallback = (SettingsFragmentCallback) context;
} catch (ClassCastException e){
}
}
Dies ist in meiner MainActivity. Hier empfange ich die Nachricht aus dem Einstellungsfragment und wenn ich sie erhalte, rufe ich die getMessage Methode des Rechners auf, so dass dieses Fragment weiß, dass der Benutzer ein Bild aus der Galerie auswählt.
public class MainActivity extends FragmentActivity implements
SettingsFragment.SettingsFragmentCallback {
@Override
public void newMessage(String message) {
CalculatorFragment cf = (CalculatorFragment)
getSupportFragmentManager().findFragmentById(R.id.fragmentCalculator);
cf.getMessage(message);
}
Dies ist in der Rechner-Fragment. Wenn der Benutzer ein neues Bild aus der Galerie ausgewählt hat, ruft er die Methode "setbackground" auf.
private void setBackground(){
final Bitmap bitmap = imageSaver.load();
if(bitmap != null){
imageViewBackground.setImageBitmap(bitmap);
}
}
public void getMessage(String message){
switch (message){
case SettingsFragment.NEW_PICTURE:
setBackground();
break;
default:
break;
}
}
ich gedebuggt dies und es funktioniert gut (es ist in der setBackground Methode kommt), aber aus irgendeinem Grunde ist die Image nicht aktualisiert. Das Bild selbst wird gespeichert und korrekt geladen, aber ImageView wird einfach nicht aktualisiert.
Vielen Dank für Ihre Hilfe!
Können Sie bitte ein Code-Snippet? –
Ich denke, dass der Rückruf funktionieren sollte, können Sie Ihren Code dort veröffentlichen, wo Sie den Rückruf verwenden? –
Sie können LocalBroadcastManager verwenden Siehe Beispiel hier http://stackoverflow.com/questions/8802157/how-to-use-localbroadcastmanager –