View Übergabe Methode

  • 5 Antworten
  • Letztes Antwortdatum
R

Rackor

Neues Mitglied
0
Hallo

hätte eine Frage bezüglich der Übergabe einer View als Paramater einer Methode.

Code:
[B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]
[LEFT]public[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]void[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] changeDataWithInput(String title, String message, [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]final[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] View view){
AlertDialog.Builder alert = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] AlertDialog.Builder(UserProfilePub.[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);
alert.setTitle(title[/SIZE][SIZE=2]);
alert.setMessage([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]message[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
[SIZE=2]/* Diesen Teil möchte ich verallgemeinern

[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]final[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] EditText input = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] EditText(getBaseContext());[/SIZE][SIZE=2]
alert.setView(input);
*/

alert.setPositiveButton(getResources().getString(R.string.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]stringOk[/I][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]), [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] DialogInterface.OnClickListener() {


[/SIZE][SIZE=2][COLOR=#646464][SIZE=2][COLOR=#646464]@Override[/LEFT]
[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][LEFT][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]public[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]void[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] onClick(DialogInterface dialog, [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] which) {
[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]user[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].set([/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], view.[U]getgetText[/U]().toString());
[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]adapter_list[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].notifyDataSetChanged();

}
});

alert.show();

}[/LEFT]
[/SIZE]

Da ich bei mehren Methoden diesen alertDialog aufrufe, aber jedesmal eine andere "InputView" zeigen will, z.b. einmal TextBox, dann Combobox etc...anscließend dann den text auslesen und in ne db speichern...wie verwirkliche ich dies? mit View view als Parameter stehe ich vor dem Problem dass view.getText() nicht möglich ist, da ja View viel mehr sein kann wo .getText ja garnicht möglich ist...bitte um Hilfe!

MfG Rackor
 
OO Design to the rescue :D

Du kannst dir ein Interface basteln, das die Ausgestsaltung des Views abstrahiert und das dann übergeben.
Hier ein Schuss aus der Hüfte nur mit EditText. Andere Viewklassen dann analog.

Code:
interface ViewController {
public View getView();
public String getResult();
}

class TextController implements ViewController {
private EditText theText;
public TextController( ggf Context ... ) { .... }
public View getView() { return theText; }
public String getResult() { return theText.getText(); }
}
 
Also du nutzt entweder statt View TextView.

Allerdings funktioniert das nicht mit Spinnern bzw Comboboxen.

@GoldeneMitte

Ich seh gerade nicht wie dein Interface da helfen soll.
Solange er da weiterhin mit View Klassen arbeitet gibt's halt kein .getText() das man aufrufen kann.

das Wird halt hier definiert:
TextView | Android Developers

Meiner Meinung nach wird man hier nicht um instanceOf herumkommen, da die verschiedenen Views die hier ausgewertet werden sollen zu verschieden sind und nur "zufällig" alle von View erben.
 
Die Lösung von die goldene Mitte sollte funktionieren..arbeite eh nur mit views wo die .gettext methode auch implementiert ist
 
Aus welchem Klassen kommt denn die .getText() Methode?
Wenn die alle aus der gleichen Klasse kommen kannste dann nicht die statt "View" nehmen?

Wahrscheinlich hab ich das Problem falsch verstanden :D
 
Ne..verwend eben auch comboboxen
 
Zurück
Oben Unten