2011-01-04 4 views
0

Gibt es eine Möglichkeit, das Symbol, das in einem standardmäßigen alertDialog-Feld angezeigt wird, dynamisch festzulegen, ohne dass ein benutzerdefiniertes erstellt werden muss? Zum Beispiel möchte ich für den folgenden alertDialog die Methode setIcon() verwenden, um das Bild anzuzeigen, das ich unter Verwendung einer uri-Variablen mit einem darin gespeicherten Pfad zur Verfügung stelle.Dynamische Verwendung von setIcon() auf Standard alertDialogs?

private void showProductInfo(){ 
    MyProduct myProduct= (MyProduct) myProductGoldenRetriever(); 
    final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle("Product Information"); 
    alertDialog.setMessage(myProduct.getMyProductInfo()); 
    alertDialog.setButton("Back", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      showPrompt(); 
     } 
    }); 
    alertDialog.setIcon(R.drawable.default_img);//<--Here Need to Provide a different image each time 
    alertDialog.show(); 
}//endOfShowProductInfo 

Ist das irgendwie möglich oder muss ich einen benutzerdefinierten alertDialog mit einer geeigneten .xml-Layout-Datei erstellen?

Antwort

2

Wenn ich Sie richtig verstehe, möchten Sie nur das Symbol auf eine Drawable von einem Uri erstellt setzen? Ich gehe davon aus, MyProduct hat eine getUri() Methode. Wenn nicht, ändern sie nur entsprechend:

Resources res = getResources(); 
BitmapDrawable icon = new BitmapDrawable(res, myProduct.getUri().toString()); 
alertDialog.setIcon(icon); 

Die BitmapDrawable Klasse hat einen Konstruktor, der in den Ressourcen und eine Zeichenfolge, die den Dateipfad nimmt. Wenn Sie einen Uri verwenden, können Sie ihn einfach mit toString() konvertieren. Die AlertDialog.Builder Klasse verfügt über eine überladene setIcon() Methode, die ein Drawable einnimmt. Erstellen Sie einfach Ihr Zeichen aus Ihrem Pfad und legen Sie es als Ihr Dialogsymbol fest. Dies wird nicht getestet (keine Eclipse hier), sollte aber funktionieren.

+0

Sie richtig verstanden, und Ihr Vorschlag scheint sehr vielversprechend. Aber wenn ich es auf verschiedene Arten versucht habe, konnte ich es nicht beheben. Zum Beispiel habe ich versucht BitmapDrawable icon = new BitmapDrawble (res, "R.drawable.default_img"); für ein IMG in meinem zeichnenden Verzeichnis. Dann habe ich versucht einen vollständigen Pfad zu einem Bild wie: "/Users/Admin/Desktop/default_img.png" nicht funktioniert entweder:/ – nifo

+0

Wenn Ihre Dateien bereits in Ihrem Zeichnungsordner sind, ändern Sie einfach default_img auf das gewünschte Symbol. Und in Ihrer MyProduct-Klasse verwenden Sie anstelle von setUri und getUri einfach ein int, um eine Ressourcen-ID zu speichern, z. setResourceId (R.drawable.image1). Dann benutze 'setIcon (myProduct.getResourceId())' ;. In Ihrem zweiten Beispiel versuchen Sie, ein Bild von Ihrem PC zu ziehen. Du kannst das nicht tun. Das ist sowieso kein vollständiger Pfad, ein vollständiger Pfad wäre etwa C: /Users/Admin/Desktop/default_img.png. – kcoppock

+0

Ich bleibe bei der Taktik, die Sie gerade erwähnt haben. Was das zweite Beispiel betrifft, verwende ich einen Mac :) Vielen Dank für Ihre Zeit und Ihr Interesse. – nifo

Verwandte Themen