Meine erste App :)

dbaf14

dbaf14

Fortgeschrittenes Mitglied
23
So Leute hab mich mal hingesetzt und es in einem Zug vollbracht!!

hab zwar bis jetzt weder ein Buch gelesen noch mich langfristig irgendwo im Netz eingelesen aber es funktioniert!!
Das ist ein Schaltplan den ein kumpel (DJ) von mir für seine Lichttechnik gut gebrauchen kann!

Ich weiß es ist total uneffizient und durcheinander geschrieben aber dennoch wollte ich mal erfragen wie ich es mir hätte einfacher machen können ?
v----- lol sogar nen schreibfehler :D
schaltplan.png

hab mal Alles hochgeladen^^

>>>Schaltplan-APK<<<

>>>Schaltplan - Source<<<

..und ein Danke an die wenigen , die mir wenigstens ein paar Hinweise gegeben haben ^_^

mfg dbaf14
 
ohne jetzt Java- geschweige denn Android-Kenntnisse zu haben, kann ich aus meiner Programmiererfahrung sagen: DRY! (Don't repeat yourself!)

Du hast da 24 Mal dieses "findViewById(R.id.ButtonXX)...".
Das kann man bestimmt als einfache Schleife verpacken und spart sich somit 23 der 24 Codeschnippsel.
 
badboy_ schrieb:
ohne jetzt Java- geschweige denn Android-Kenntnisse zu haben, kann ich aus meiner Programmiererfahrung sagen: DRY! (Don't repeat yourself!)

Du hast da 24 Mal dieses "findViewById(R.id.ButtonXX)...".
Das kann man bestimmt als einfache Schleife verpacken und spart sich somit 23 der 24 Codeschnippsel.

Nein, das ist nicht dynamisch ansprechbar.

Btw:
Du packst jedes findViewById(); in einen Block, und packst diesen Block dann noch in den darübergestellten Block. :confused::confused:
Die ganzen Klammern sind echt absolut sinnlos.
Das zweite:
Ich würde nicht tausend verschiedene onClickListeneres erstellen, sondern nur einen (was bestimmt auch performanter ist):
Code:
OnClickListener onclick = new OnClickListener(){
   public void onClick(View v){
      int id = v.getId();
      switch(id){
      case R.id.button1: //mach iwas break;
      case R.id.button2:   ... break;
.
.
.
      }
   }
};
findViewById(R.id.button1).setOnClickListener(onclick);
.
.
.
Was das Programm macht hab ich jetzt aber nicht verstanden. :confused:
 
Zuletzt bearbeitet:
Das sind binomische zahlen ,und damit er da im Stress nicht ewig überlegen muss ist so ne app denke ich mal ganz praktisch!

Klar hätte man das noch in zig anderen Varianten schreiben können. .aber so weit bin ich halt noch nicht. :)

Danke für die Tipps!

Mfg

edit: cool danke . mit nur einem OnClickListener ist das zudem viel übersichtlicher.
 
Zuletzt bearbeitet:
So, habs jetzt auch geschafft die App aufm Emu zu installiere - lmao, hatte die ganze zeit mit adb push gekämpft, statt install zu nehmen.
Jedes mal einen Intent starten und somit auch immer alles neuzeichnen ist stark suboptimal mMn.
Stattdessen solltest du bei jedem Klick lediglich die Zahlen unten ändern...
 
Fr4gg0r schrieb:
Ich würde nicht tausend verschiedene onClickListeneres erstellen, sondern nur einen (was bestimmt auch performanter ist):

Da wäre ich mir gar nicht mal so sicher bei 3-4 Button's bestimmt aber je mehr unterschiedliche OnClick-Events du hast desto unübersichtlicher wird der Listener und du hast jedes mal toten Code ob das jetzt was macht weis ich nicht kann ich in Java leider noch nicht so beurteilen... hast du mal ein Profiling gemacht?

Eines ist jedoch klar schön ist keine beiden Lösungen.
 
Ja hast recht, schneller ist es wohl 30 verschiedene Listener zu haben.
Einen zu haben sollte jedoch weniger Speicher brauchen denk ich mal und auch weniger Initialisierungszeit benötigen?
 
Hätte mir den Code jetzt auch angeguckt, allerdings kann man den von Rapidshare nichtmehr runterladen...
 
saubere programmierung ist das aber nicht 20 mal den gleichen listener auf zu setzen... man sollte seine methoden logisch aufbauen, dass man sie so oft wie möglich und logisch machbar ist benutzen kann. ich würde an der stelle allein wegen dem code style und der übersichtlichkeit auch nur 1 listener nutzen und den strukturiert ordentlich aufbauen... vorallem, wenn nur ne zahl angepasst wird also bitte.. naja jeder wie er mag ;) bei mir würde sowas nicht durchgehen =)
 
Ich würde ja gerne mitreden anhand des codes, aber den hab ich nicht. Aber zu den Listenern:
Wenn man 20 mal per Copy & Paste einen Listener anhängt ist das schlecht. Wenn man genau ein Listener Objekt erstellt und das überall dranhängt und dann per switch case irgendetwas abfragt, ist das genauso schlecht. Solche Listener sehe ich hier auf der Arbeit zu Hauf und der Code macht ständig Probleme und man weiss nie was wofür ist.
Dann sollte man eine Methode haben die eben jenen Listener, der sonst 20 mal deklariert wird, beinhaltet und ein neues Objekt davon zurück gibt. Alles andere würde bei mir nicht durchgehen ;)
 
MichaelS schrieb:
ich würde an der stelle allein wegen dem code style und der übersichtlichkeit auch nur 1 listener nutzen und den strukturiert ordentlich aufbauen... vorallem, wenn nur ne zahl angepasst wird also bitte.. naja jeder wie er mag ;) bei mir würde sowas nicht durchgehen =)

Ich hab leider keinen Beispielscode zur Hand aber mich würde das Profiling interesieren.

Traceview: A Graphical Log Viewer | Android Developers
 
So hab nochmal alles hochgeladen :)

mirror 1

mirror 2

leute ich muss echt sagen, echt klasse dass hier so viele informationen und hinweise zusammen kommen,, wenn ich danach selber rumhandtiere macht es am laufenden band klick klick klick klick bei mir im turm :D

einfache beispiele wären die krönung ^^
aber man kann ja nich alles haben!


mfg dbaf14
 
Was ich meine ist, man könnte statt ständig eine neue anonyme Klasse zu machen, die sowieso ewig das gleiche tut das alles in eine Methode auslagern:
Code:
private OnClickListener getListener(final Context context, final Class clazz) {
		return new View.OnClickListener() {
	        public void onClick(View v){ 
           	    Intent schaltplan1 = new Intent(context, clazz);
  				startActivity(schaltplan1);
        		finish();
 	         }
    	};
	}
Dann kann man den Listener ganz einfach so anhängen:
Code:
findViewById(R.id.Button01).setOnClickListener(getListener(this, schaltplan1.class));

Das alles ist aber total unnütz wenn du eh nur ein paar Zahlen unten änderst. Da solltest du dir unten einen TextView machen wo du je nach Button einen String einsetzt. Dann könnte die onCreate Methode so in etwa aussehen:

Code:
public class Schaltplan extends Activity {
	
	private OnClickListener getListener(int stringNummer) {
		return new View.OnClickListener() {
	        public void onClick(View v){ 
           	    findViewById(R.id.TextView01).setText(strings[i]);
 	         }
    	};
	}
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        
        setContentView(R.layout.main);
       
        findViewById(R.id.Button01).setOnClickListener(getListener(0));
        findViewById(R.id.Button01).setOnClickListener(getListener(1));
        findViewById(R.id.Button01).setOnClickListener(getListener(2));
        findViewById(R.id.Button01).setOnClickListener(getListener(3));
        findViewById(R.id.Button01).setOnClickListener(getListener(4));
        findViewById(R.id.Button01).setOnClickListener(getListener(5));
        findViewById(R.id.Button01).setOnClickListener(getListener(6));
        findViewById(R.id.Button01).setOnClickListener(getListener(7));
        findViewById(R.id.Button01).setOnClickListener(getListener(8));
        findViewById(R.id.Button01).setOnClickListener(getListener(9));
        findViewById(R.id.Button01).setOnClickListener(getListener(10));
        findViewById(R.id.Button01).setOnClickListener(getListener(11));
        findViewById(R.id.Button01).setOnClickListener(getListener(12));
        findViewById(R.id.Button01).setOnClickListener(getListener(13));
        findViewById(R.id.Button01).setOnClickListener(getListener(14));
        findViewById(R.id.Button01).setOnClickListener(getListener(15));
        findViewById(R.id.Button01).setOnClickListener(getListener(16));
        findViewById(R.id.Button01).setOnClickListener(getListener(17));
        findViewById(R.id.Button01).setOnClickListener(getListener(18));
        findViewById(R.id.Button01).setOnClickListener(getListener(19));
        findViewById(R.id.Button01).setOnClickListener(getListener(20));
        findViewById(R.id.Button01).setOnClickListener(getListener(21));
        findViewById(R.id.Button01).setOnClickListener(getListener(22));
        findViewById(R.id.Button01).setOnClickListener(getListener(23));
            
    }
}
Du musst natürlich noch das Stringarray "strings" anlegen und alle deine 24 Strings dort reinlegen. Aber somit hast du dir 24 Klassen x 24 Listener erspart plus 23 Listener in diese Klasse. Macht insgesamt 599 kompilierte .class Dateien weniger! Man mag hier argumentieren wie man möchte mit Listenern, aber 599 ist Fakt.

Wenn du das ganze so machst fallen auch 24 Layouts weg...

PS: Es ist nur eine Konvention und kein Muss... aber Klassen schreibt man mit einem Großbuchstaben am Anfang!
PPS: Nicht meckern wenns nicht kompiliert, ich habs nur schnell im Browser ins Unreine geschrieben. Ich hoffe es hilft.
PPPS: Glatt nen Riesenfehler im Code gefunden und korrigiert ;)
 
Zuletzt bearbeitet:

Ähnliche Themen

U
  • unerfahrenerAppEntwickler
Antworten
3
Aufrufe
665
swa00
swa00
5
Antworten
22
Aufrufe
1.367
590239
5
R
  • Robby1950
2
Antworten
23
Aufrufe
954
Robby1950
R
Zurück
Oben Unten