Ich habe zwei Anwendungen, und ich muss Daten (Text und Bild) von einem zum anderen teilen. Alles funktioniert gut, außer, wenn ich das Bild nach dem Ändern des Textes ändere (ich lade das Foto hoch, nachdem ich den Text eingegeben habe, oder ich lade das Bild nach der Texteingabe hoch), wird mein Bild nicht in der zweiten Anwendung aktualisiert. Ich brauche etwas wie TextWatcher für ImageView. Irgendwelche Ideen ? HierAndroid: Update Image Uri in der Absicht von ShareActionProvider
ist die wichtige Teile meiner ersten Anwendung:
Uri imageUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@Override
public void afterTextChanged(Editable s) {
if (mShareActionProvider != null) {
mShareActionProvider.setShareIntent(setShareIntent());
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.layout_menu, menu);
MenuItem share = menu.findItem(R.id.menu_item_share);
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(share);
mShareActionProvider.setShareIntent(setShareIntent());
invalidateOptionsMenu();
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
setMessageIntent();
return super.onOptionsItemSelected(item);
}
private Intent setShareIntent() {
String share = message.getText().toString();
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
if (imageUri != null) {
shareIntent.setType("image/png");
} else {
shareIntent.setType("text/plain");
}
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Here goes my sharing");
shareIntent.putExtra(Intent.EXTRA_TEXT, share);
return shareIntent;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
imageUri = data.getData();
String[] path = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(imageUri, path, null, null, null);
cursor.moveToFirst();
int index = cursor.getColumnIndex(path[0]);
String imgString = cursor.getString(index);
image.setImageURI(imageUri);
break;
}
}
Und hier ist meine zweite Anwendung, wo ich die Daten gemeinsam nutzen:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent receiver = getIntent();
String received_text = receiver.getStringExtra(receiver.EXTRA_TEXT);
Uri imageUri = (Uri) receiver.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(bitmap);
}
if (received_text != null) {
text.setText(received_text);
}
}
Das Problem ist in meiner ersten Anwendung, denn imageUrl ändert sich nicht. es ändert sich nur, wenn ich den Text ändere, weil ich Absicht in ShareActionProvider dort und auch in OnCreateOptionMenu setze. – Astgh
set Log, wenn Sie Image URI in Intent und onActivityResult festlegen. –