Dieses kleine Ding begann mich sehr zu frustrieren. Ich dachte, es sei etwas Einfaches zu tun, aber ich glaube, ich habe nicht klar verstanden, wie Android funktioniert.
Wie dem auch sei, das Problem ist, dass meine Android-Anwendung einige Schaltflächen haben wird, die beim Drücken ein Dialogfeld für Datum oder Uhrzeit öffnen. Ich weiß, wie man sie direkt in derselben Klasse wie die Hauptaktivität implementiert, aber ich glaube nicht, dass dies eine gute Lösung aus Gründen der Wartbarkeit ist und auch, wenn ich diese Anwendung irgendwann weiterentwickeln werde.
Ich habe versucht, dies auf verschiedene Weisen zu tun und jedes Mal gescheitert, wenn ich es versucht habe. Das hat mich ziemlich ratlos gelassen, was zu tun ist und wo das Problem liegt.
Hier ist eine Methode, die ich versucht habe:
die Hauptaktivität (ich habe sie vereinfacht und versucht, nur den notwendigen Code bereitzustellen, da er lang ist). Dies folgt dem Singleton-Entwurfsmuster.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dateButton = (Button) findViewById(R.id.editDateButton);
dateButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if(view.getId() == R.id.editStartDateButton) {
DatePickers.getInstance().setDate(dateButton);
}
}
Die DatePickers-Klasse (erweitert Activity; ebenfalls vereinfachter Code und alle unnötigen Dinge entfernt):
private static DatePickers self = null;
public static DatePickers getInstance() {
if (null == self) {
self = new DatePickers();
}
return self;
}
public void setDate(Button button) {
theButtonUsed = button;
showDialog(DATE_DIALOG_ID);
}
Nach dem Aufruf von showDialog ist die Klasse ähnlich wie im Beispiel Hello-DatePicker auf der Android-Entwicklerseite.
Ich habe auch versucht, es so ziemlich wie hier zu tun, aber mit dem Unterschied, dass wenn auf dateButton geklickt wird, es die neue Aktivität startet, die den Datumsauswahldialog enthält. In diesem Fall sah die datePicker-Klasse so aus:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.datePicker);
showDialog(DATE_DIALOG_ID);
}
Und der Rest wie im Beispiel Hello-DatePicker auf der Android-Dev-Site. Beide Lösungen führten zu einem Problem, bei dem meine Anwendung abgestürzt ist und beendet werden musste.
Ich hoffe, Sie verstehen, wo das Problem liegt, und dass Sie mich führen und zeigen können, was ich falsch mache. Ich habe versucht, dies kurz zu halten und nur die notwendigen Informationen bereitzustellen.
Danke -Z
Bearbeitet:
Wie ich in einem der Kommentare erwähnt habe, war das eigentliche Problem dabei, dass ich schlicht vergessen hatte, die neue Aktivität zur Manifestdatei hinzuzufügen. Es könnte noch andere Probleme gegeben haben, die mit der akzeptierten Antwort gelöst wurden. Ich hoffe, dass dies immer noch hilfreich ist für alle, die ähnliche Probleme haben.