EventListener in main.xml-Datei

  • Antworten:6
Sanjo123
  • Forum-Beiträge: 21

03.02.2011, 00:13:52 via Website

Hallo,

ich habe bei ersten Programmen gemerkt, dass nicht alle Events (bspw. "OnCheck" einer Checkbox) im main.xml verlinkt werden können, weil dort "OnCheck" unbekannt sei. Wenn ich allerdings in der Activity-Klasse Checkbox1.setOnCheckListener versuche, geht das problemlos.

Woran liegt das und wie kann ich das auch in der XML realisieren?

Danke!

Bye Sanjo

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

03.02.2011, 08:58:38 via Website

es gibt über xml nur die möglichkeit den onklicklistener anzugeben.

alle anderen müssen via source code gesetzt werden

swordiApps Blog - Website

Antworten
Sanjo123
  • Forum-Beiträge: 21

03.02.2011, 17:24:24 via Website

Und warum ist das so? Das führt doch den Ansatz von der Trennung des (deklarativen) Layouts und der Funktionalität ad absurdum. Und das Zuweisen eines Listeners über ein Typecasting ist noch dazu äußerst unschön :(

Bist du dir da wirklich sicher, dass das nicht doch geht? Verwundert mich sehr, da Android an sich eine sehr schöne Architektur zu haben scheint.

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

03.02.2011, 17:36:43 via Website

das aber nichts damit zu tun dass du layout und funktionalität trennst.

deine funktionalität wird in klassen gehandhabt, die nichts mit dem layout zu tun haben => klar

aber eine activity hat viel mit dem layout zu tun und deshalb wirst du dort auch listener für die user interaktion setzen.

das onclick gab es früher auch nicht im xml - erst ab 1.6.

welches typcasting meinst du?

ich mache
myButton.setOnClickListener(myOnclickListener)

da caste ich nichts.

swordiApps Blog - Website

Antworten
Sanjo123
  • Forum-Beiträge: 21

03.02.2011, 17:59:35 via Website

Mit der Trennung hast du recht. Aber ich bevorzuge, wenn es geht, eine deklarative Programmierung und da wäre das super gewesen. Ist halt nur etwas inkonsistent, wenn man manche Events im XML deklarieren kann und manche nicht.

Das Typecasting ist dies hier:
1CheckBox checkBox = ((CheckBox) findViewById(R.id.checkBox));
2checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()

Ist halt etwas unschön, naja.

Gibt es irgendwo eigentlich Naming Conventions für Android-Widgets, also bspw. btnOK für einen OK-Button?

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

03.02.2011, 18:06:29 via Website

NameConevtions gibst ansich nicht, du solltest möglichst Sprechende Namen verwenden, bei mehr als 5 Attributen komme ich oft schon durcheinander...bei 20 ist es die Hölle ohne ordentliche Namensgebung.

Aber was soll Java da auch noch machen ? findViewById liefert einen View, die Root UI Klasse, oftmals sogar schon ausreichend für einige Dinge.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

03.02.2011, 19:56:48 via Website

Gibt es irgendwo eigentlich Naming Conventions für Android-Widgets, also bspw. btnOK für einen OK-Button?

Ich persönlich halte mich größtenteils an das Google Dokument welches eigentlich an Kontributoren für Android selbst gerichtet ist. Außer den "m" Kram habe ich eigentlich alles übernommen - bin halt seit über 20 Jahren und bestimmt einem Dutzend Programmiersprachen ein Anhänger der echten ungarischen Notation.

http://source.android.com/source/code-style.html

Deinen Button kannst Du also benennen wie Du willst (Android: Button mButton, HN: Button buttonOk, ...).

Wenn man in Googles Dokument rumstöbert findet man auch Vorschläge wie man sein Eclipse einstellen soll (Tabs, Einzüge, ...).

Gruß
Harald

Antworten