2 Stimmen

Android - Hinzufügen von Fotos, die vom Benutzer aufgenommen wurden, in eine ListView

Ich habe derzeit einen einfachen Listenadapter, der zwei Textzeilen enthält. Was ich als nächstes versuche, ist die Möglichkeit hinzuzufügen, dass ein Foto, das der Benutzer aufgenommen hat, in der Listenansicht angezeigt wird. Ich habe meinen Listenadapter wie folgt angepasst:

standardAdapter = new SimpleAdapter(this, list, R.layout.post_layout,
                new String[] { "time", "post", "image"}, new int[] {
                        R.id.postTimeTextView, R.id.postTextView, R.id.post_imageView});

Dann füge ich es wie gewöhnlich der Hash Map hinzu und aktualisiere den Adapter:

// Erstelle eine neue Hash Map mit dem Text aus dem Beitrag
        feedPostMap = new HashMap();
        feedPostMap.put("time", currentTimePost);
        feedPostMap.put("post", post);
        if(photoWasTaken == 1){
            feedPostMap.put("image", pictureTaken);
        }
        // Füge die Map zur Liste hinzu
        list.add(feedPostMap);

        // Aktualisiere den Adapter
        standardAdapter.notifyDataSetChanged();

Zuletzt hier ist der Code für die Aktivität bei Ergebnis:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "Aktivität für Ergebnis- KAMERA");
        if (resultCode == Activity.RESULT_OK) {
            // Datei erhalten und decodieren
            pictureTaken = BitmapFactory.decodeFile("/sdcard/livefeedrTemp.png");

            // Bild über dem Textfeld anzeigen
            imageViewShowPictureTaken.setImageBitmap(pictureTaken);
            displayPhotoLayout.setVisibility(LinearLayout.VISIBLE);

            //NEU - Bildvariable auf 1 setzen
            photoWasTaken = 1;
        }
    }

Ich stoße jedoch auf ein Problem. Das Foto, in Form von Bitmap, wird nicht zur Listenansicht hinzugefügt. Es erscheint nur als leerer weißer Raum. Mache ich hier etwas falsch? Zweitens, wenn der Benutzer entscheidet, kein Bild aufzunehmen, sollte das Bild nicht angezeigt werden. Ich bin mir nicht sicher, wie ich das umsetzen soll. Sollte ich einen benutzerdefinierten Listenadapter erstellen?

Vielen Dank für deine Hilfe

2voto

balazsbalazs Punkte 4041

Das Problem besteht darin, dass SimpleAdapter standardmäßig keine Bitmaps unterstützt.

Standardmäßig wird der Wert als Bildressource behandelt. Wenn der Wert nicht als Bildressource verwendet werden kann, wird der Wert als Bild-Uri verwendet.

Es gibt jedoch eine Lösung. Sie können einen benutzerdefinierten ViewBinder festlegen und das Binding selbst durchführen.

class MyViewBinder implements SimpleAdapter.ViewBinder {
    @Override
    public boolean setViewValue(View view, Object data, String textRepresentation) {
        if (view instanceof ImageView && data instanceof Bitmap) {
            ImageView v = (ImageView)view;
            v.setImageBitmap((Bitmap)data);
            // gibt true zurück, um anzuzeigen, dass das Binden erfolgreich war
            return true;
        }
        return false;
    }
}

Und setzen Sie dies in Ihren SimpleAdapter:

adapter.setViewBinder(new MyViewBinder());

Auf diese Weise ruft der SimpleAdapter jedes Mal, wenn er versucht, einen Wert an eine Ansicht zu binden, zuerst die setViewValue-Methode Ihres View-Binders auf. Wenn diese false zurückgibt, versucht er, es selbst zu binden.


Sie können auch versuchen, in Ihre Map einen URL als Zeichenkette einzufügen, der auf den Speicherkartenstandort zeigt. Ich bin mir jedoch nicht sicher, ob der SimpleAdapter damit umgehen kann.


Siehe auch diesen Beitrag: Dynamically show images from resource/drawable

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X