onClick()x2

  • Antworten:68
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 201

14.12.2013 14:24:59 via App

Hallo
Wie kann man eigentlich zwei onClick Methoen in einer Klasse machen?
habe noch recht wenig erfahrung....
Danke

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.205

14.12.2013 14:43:27 via Website

Pro button einen OnClick Listener ausetzen

1Button btn = (Button)findViewById(R.id.deinBTN);
2btn.setOnClickListener(new OnClickListener() {
3
4@Override
5public void onClick(View v)
6{
7//DoYour things
8
9}
10
11});
12
13Button btn1 = (Button)findViewById(R.id.deinBTN1);
14btn1.setOnClickListener(new OnClickListener() {
15
16@Override
17public void onClick(View v)
18{
19//DoYour things
20
21}
22
23});

LG Pascal //It's not a bug, it's a feature. :) ;)

  • Forum-Beiträge: 201

14.12.2013 15:22:54 via App

Kannst du mir vielleicht eine beispiel onclick schicken.
Danke

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

  • Forum-Beiträge: 201

14.12.2013 15:46:44 via App

Ja sorry, aber danke!

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

  • Forum-Beiträge: 2.545

14.12.2013 16:02:07 via Website

Besser *eine* onClick-Methode für alle Buttons

Begründung?
Weil weniger Objekte angefordert werden?
  • Forum-Beiträge: 1.793

14.12.2013 16:16:43 via App

Einerseits das, andererseits finde ich es übersichtlicher, alle Aufrufe an einer Position zu haben, sofern sie sich ähneln. (Z.b. verschiedene Activitys aufrufen.) Oftmals schreiben Anfänger einen Listener in der onCreate, dann wieder etwas Code, dann der nächste Listener usw. Am Ende muss man den halben Quellcode durchlesen, um den richtigen zu finden.
Zumal es auch die Länge des Quellcodes reduziert.
LG

— geändert am 14.12.2013 16:17:21

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

  • Forum-Beiträge: 2.256

14.12.2013 16:58:30 via App

Du meinst bestimmt mit this also
1public void onCreate(){
2Button btn1 = (Button)findViewById(R.id.button1);
3btn1.setOnClickListener(this);
4Button btn2 = (Button)findViewById(R.id.button2);
5btn2.setOnClickListener(this);
6}
7
8public void onClick(View v){
9switch (v.getId())
10case R.id.button1:
11
12break;
13case R.id.button2:
14
15break;
16}
du musst nur noch bei this den onclicklisterner implementieren
LG

— geändert am 14.12.2013 17:00:07

gruß Jonas ||Galaxy S with cm10.1 4.2.1|| gegen überlange Zitate

  • Forum-Beiträge: 201

14.12.2013 17:26:54 via App

Und was wenn der eine onClickListener ein Objekt und der zweite ein Button ist?

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

  • Forum-Beiträge: 201

14.12.2013 18:49:43 via App

Tom Com
Und was wenn der eine onClickListener ein Objekt und der zweite ein Button ist?
Bitte ich brauche Hilfe

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

  • Forum-Beiträge: 272

14.12.2013 18:51:59 via Website

Ausprobieren...das ist der Sinn der Softwareentwicklung.
  • Forum-Beiträge: 201

14.12.2013 18:54:50 via App

Ich habs ja ptobiert aber es geht eben nicht

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

  • Forum-Beiträge: 272

14.12.2013 19:54:03 via Website

Solange das Objekt einen ClickListener unterstützt, sollte es gehen.
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.205

14.12.2013 20:24:29 via App

Poste code oder beschreibe dein Problem genauer.
ohne irgendwelche anhaltspunkte kann dir niemand helfen

LG Pascal //It's not a bug, it's a feature. :) ;)

  • Forum-Beiträge: 201

15.12.2013 07:51:19 via Website

Das Problem hab ich eh gelöst wenn ich aber das Spiel starte und auf Start drücke komm ich nicht zur GameActivity sondern die App bricht ab. Im LogCat steht NullPointerExpection die GameActivity hab ich im Manifest angemeldet.
was kann ich tun?

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.205

15.12.2013 08:23:06 via App

Ja und was kann man da machen..
Natürlich den Code überprüpen und aus LogCat lesen wo die Nullpointerexception auftritt.

LG Pascal //It's not a bug, it's a feature. :) ;)

  • Forum-Beiträge: 201

15.12.2013 09:53:41 via Website

Die NullPointerExpection ist jetzt weg dafür steht das:
12-15 09:49:33.820: E/AndroidRuntime(9429): FATAL EXCEPTION: main
12-15 09:49:33.820: E/AndroidRuntime(9429): java.lang.RuntimeException: Unable to start activity ComponentInfo{at.tomcom.strangefly/at.tomcom.strangefly.GameActivity}: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.FrameLayout
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245)
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295)
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.app.ActivityThread.access$700(ActivityThread.java:150)
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.os.Handler.dispatchMessage(Handler.java:99)
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.os.Looper.loop(Looper.java:175)
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.app.ActivityThread.main(ActivityThread.java:5279)
12-15 09:49:33.820: E/AndroidRuntime(9429): at java.lang.reflect.Method.invokeNative(Native Method)
12-15 09:49:33.820: E/AndroidRuntime(9429): at java.lang.reflect.Method.invoke(Method.java:511)
12-15 09:49:33.820: E/AndroidRuntime(9429): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
12-15 09:49:33.820: E/AndroidRuntime(9429): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
12-15 09:49:33.820: E/AndroidRuntime(9429): at dalvik.system.NativeStart.main(Native Method)
12-15 09:49:33.820: E/AndroidRuntime(9429): Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.FrameLayout
12-15 09:49:33.820: E/AndroidRuntime(9429): at at.tomcom.strangefly.GameActivity.onCreate(GameActivity.java:43)
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.app.Activity.performCreate(Activity.java:5283)
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
12-15 09:49:33.820: E/AndroidRuntime(9429): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
12-15 09:49:33.820: E/AndroidRuntime(9429): ... 11 more
Ich bin kein guter LogCat Leser. Was bedeutet das? Habe auch den Layout Code der GameActivity:
1<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:background="@drawable/hintergrund"
6 android:paddingBottom="@dimen/activity_vertical_margin"
7 android:paddingLeft="@dimen/activity_horizontal_margin"
8 android:paddingRight="@dimen/activity_horizontal_margin"
9 android:paddingTop="@dimen/activity_vertical_margin"
10 tools:context=".StartActivity" >
11
12 <FrameLayout
13 android:id="@+id/frameLayout1"
14 android:layout_width="wrap_content"
15 android:layout_height="wrap_content"
16 android:layout_alignParentLeft="true"
17 android:layout_alignParentRight="true"
18 android:layout_alignParentTop="true" >
19
20 <TextView
21 android:id="@+id/points"
22 android:layout_width="wrap_content"
23 android:layout_height="wrap_content"
24 android:text="Large Text"
25 android:textAppearance="?android:attr/textAppearanceLarge"
26 android:textColor="@color/dunkelblau"
27 android:textStyle="bold" />
28
29 <TextView
30 android:id="@+id/round"
31 android:layout_width="wrap_content"
32 android:layout_height="wrap_content"
33 android:layout_gravity="right"
34 android:text="Large Text"
35 android:textAppearance="?android:attr/textAppearanceLarge"
36 android:textColor="@color/dunkelrot"
37 android:textStyle="bold" />
38
39 <Button
40 android:id="@+id/Pause"
41 android:layout_width="wrap_content"
42 android:layout_height="wrap_content"
43 android:layout_gravity="center"
44 android:onClick="@string/p"
45 android:text="Pause" />
46
47 </FrameLayout>
48
49 <LinearLayout
50 android:id="@+id/linearLayout1"
51 android:layout_width="wrap_content"
52 android:layout_height="wrap_content"
53 android:layout_alignLeft="@+id/frameLayout1"
54 android:layout_alignParentBottom="true"
55 android:layout_alignRight="@+id/frameLayout1"
56 android:orientation="vertical" >
57
58 <FrameLayout
59 android:layout_width="match_parent"
60 android:layout_height="wrap_content"
61 android:layout_weight="2.23" >
62
63 <FrameLayout
64 android:id="@+id/bar_hits"
65 android:layout_width="50dp"
66 android:layout_height="5dp"
67 android:layout_gravity="center_vertical"
68 android:background="@color/dunkelblau" >
69
70 </FrameLayout>
71
72 <TextView
73 android:id="@+id/hits"
74 android:layout_width="wrap_content"
75 android:layout_height="wrap_content"
76 android:layout_gravity="right"
77 android:layout_weight="2.23"
78 android:text="TextView"
79 android:textColor="@color/dunkelblau" />
80
81 </FrameLayout>
82
83 <FrameLayout
84 android:layout_width="match_parent"
85 android:layout_height="wrap_content"
86 android:layout_weight="2.23" >
87
88 <FrameLayout
89 android:id="@+id/bar_time"
90 android:layout_width="50dp"
91 android:layout_height="5dp"
92 android:layout_gravity="center_vertical"
93 android:background="@color/dunkelrot" >
94
95 </FrameLayout>
96
97 <TextView
98 android:id="@+id/time"
99 android:layout_width="wrap_content"
100 android:layout_height="wrap_content"
101 android:layout_gravity="right"
102 android:text="TextView"
103 android:textColor="@color/dunkelrot" />
104
105 </FrameLayout>
106
107 </LinearLayout>
108
109 <FrameLayout
110 android:id="@+id/spielbereich"
111 android:layout_width="match_parent"
112 android:layout_height="match_parent"
113 android:layout_below="@+id/frameLayout1"
114 android:layout_marginLeft="10dp" >
115
116 </FrameLayout>
117</RelativeLayout>

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

  • Forum-Beiträge: 1.793

15.12.2013 10:19:30 via App

Tom Com
java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.FrameLayout
12-15 09:49:33.820: E/AndroidRuntime(9429): at at.tomcom.strangefly.GameActivity.onCreate(GameActivity.java:43)
Steht doch alles wichtige in deinem LogCat drin! Schau dir die entsprechende Zeile an! Code von einem Layout wird in 99,9% der Fälle nicht benötigt. Wichtig ist der Code in Java.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

  • Forum-Beiträge: 201

15.12.2013 10:57:53 via Website

Die
1ImageView flyi = new ImageView(this);
steht in eineFlyanzeigen. Wie kann man das aber auch für die onClick() verwenden?
Hier der Code
1package at.tomcom.strangefly;
2
3import java.util.Date;
4import java.util.Random;
5
6import android.app.Activity;
7import android.content.Intent;
8import android.media.MediaPlayer;
9import android.os.Bundle;
10import android.os.Handler;
11import android.view.Gravity;
12import android.view.View;
13import android.view.View.OnClickListener;
14import android.view.ViewGroup;
15import android.view.ViewGroup.LayoutParams;
16import android.widget.Button;
17import android.widget.FrameLayout;
18import android.widget.ImageView;
19import android.widget.TextView;
20
21public class GameActivity extends Activity implements Runnable{
22 private static final int ZEITSCHEIBEN = 600;
23 private static final int INTERVALL = 100;
24 private static final long HOECHSTALTER_MS = 2000;
25 private float massstab ;
26 private Random zufallsgenerator = new Random();
27 private int runde;
28 private int punkte;
29 private ViewGroup spielbereich;
30 private int gefangeneFly;
31 private int zeit;
32 private int fly;
33 private Handler handler = new Handler();
34 private static final String HELFER = "HELFER";
35 private MediaPlayer mp;
36
37
38
39 @Override
40 public void onCreate(Bundle savedInstanceState) {
41 super.onCreate(savedInstanceState);
42 setContentView(R.layout.activity_game);
43 massstab = getResources().getDisplayMetrics().density;
44 spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
45 spielStarten();
46 mp = MediaPlayer.create(this,R.raw.summen);
47
48
49
50 }
51
52
53 private void spielStarten() {
54 runde = 0;
55 punkte = 0;
56 starteRunde();
57 }
58 private void starteRunde(){
59 runde = runde +1;
60 fly = runde * 20;
61 gefangeneFly = 0;
62 zeit = ZEITSCHEIBEN;
63 bildschirmAktualisieren();
64 handler.postDelayed(this,INTERVALL);
65 }
66
67 private boolean pruefeRundenende(){
68 if (zeit == 0){
69 punkte += 1000;
70 starteRunde();
71 return true;
72 }
73 return false;
74 }
75
76 private boolean pruefeSpielende(){
77 if( zeit == 0 && gefangeneFly < fly){
78 gameOver();
79 return true;
80 }
81 return false;
82 }
83 private void gameOver(){
84 startActivity(new Intent(this, GameOver.class));
85 finish();
86 }
87 private void zeitHerunterzaehlen(){
88 zeit = zeit -1;
89 float zufallszahl = zufallsgenerator.nextFloat();
90 double wahrscheinlichkeit = fly * 1.5/ZEITSCHEIBEN;
91 if ( wahrscheinlichkeit > 1 ) {
92 eineFlyAnzeigen();
93 if ( zufallszahl < wahrscheinlichkeit - 1) {
94 eineFlyAnzeigen();
95 }
96 } else {
97 if ( zufallszahl < wahrscheinlichkeit) {
98 eineFlyAnzeigen();
99 }
100
101 }
102 flyVerschwinden();
103 bildschirmAktualisieren();
104 if(!pruefeSpielende()) {
105 if(!pruefeRundenende()){
106 handler.postDelayed(this, INTERVALL);
107 }
108
109 }
110
111 }
112 private void bildschirmAktualisieren(){
113 TextView tvPunkte = (TextView)findViewById(R.id.points);
114 tvPunkte.setText(Integer.toString(punkte));
115 TextView tvRunde = (TextView)findViewById(R.id.round);
116 tvRunde.setText(Integer.toString(runde));
117 TextView tvTreffer = (TextView)findViewById(R.id.hits);
118 tvTreffer.setText(Integer.toString(gefangeneFly));
119 TextView tvZeit = (TextView)findViewById(R.id.time);
120 tvZeit.setText(Integer.toString(zeit));
121 FrameLayout flTreffer = (FrameLayout)findViewById(R.id.bar_hits);
122 LayoutParams lpTreffer = flTreffer.getLayoutParams();
123 lpTreffer.width = Math.round( massstab * 300 *
124 Math.min( gefangeneFly,fly) / fly);
125 FrameLayout flZeit = (FrameLayout)findViewById(R.id.bar_time);
126 LayoutParams lpZeit = flZeit.getLayoutParams();
127 lpZeit.width = Math.round( massstab * zeit * 300 / ZEITSCHEIBEN);
128
129
130
131 }
132
133
134 private void eineFlyAnzeigen(){
135 ImageView flyi = new ImageView(this);
136 flyi.setImageResource(R.drawable.ic_launcher);
137 flyi.setOnClickListener(new OnClickListener(){
138 @Override
139 public void onClick(View v){
140
141 if(flyi.getTag(R.id.tier) == HELFER) {
142 punkte -= 1000;
143 } else {
144 gefangeneFly++;
145 punkte +=10;
146 bildschirmAktualisieren();
147 spielbereich.removeView(flyi);
148 mp.pause();
149 }
150 }
151 });
152
153 int breite = spielbereich.getWidth();
154 int hoehe = spielbereich.getHeight();
155
156
157 flyi.setTag(R.id.geburtsdatum, new Date());
158 int fly_breite = (int)Math.round(massstab*50);
159 int fly_hoehe = (int)Math.round(massstab*50);
160 int links = zufallsgenerator.nextInt(breite-fly_breite);
161 int oben = zufallsgenerator.nextInt(hoehe-fly_hoehe);
162
163 FrameLayout.LayoutParams params =
164 new FrameLayout.LayoutParams(fly_breite,fly_hoehe);
165 params.leftMargin = links;
166 params.topMargin = oben;
167 params.gravity = Gravity.TOP + Gravity.LEFT;
168 if(zufallsgenerator.nextFloat() < 0.05) {
169 flyi.setImageResource(R.drawable.helfer);
170 flyi.setTag(R.id.tier,HELFER);
171 } else {
172 flyi.setImageResource(R.drawable.ic_launcher);
173 }
174 spielbereich.addView(flyi,params);
175 mp.seekTo(0);
176 mp.start();
177
178 }
179 private void flyVerschwinden() {
180 int nummer = 0;
181 while(nummer < spielbereich.getChildCount() ) {
182 ImageView flyi = (ImageView) spielbereich.getChildAt(nummer);
183 Date geburtsdatum = (Date) flyi.getTag(R.id.geburtsdatum);
184 geburtsdatum.getTime();
185 long alter = (new Date()).getTime() - geburtsdatum.getTime();
186 if(alter > HOECHSTALTER_MS ) {
187 spielbereich.removeView(flyi);
188 mp.pause();
189 }else{
190 nummer++;
191
192 }
193 }
194
195
196
197
198
199
200
201
202
203 Button pause = (Button)findViewById(R.id.Pause);
204 pause.setOnClickListener(new OnClickListener(){
205 @Override
206 public void onClick(View v)
207 {
208
209
210 onPause();
211 startActivity();
212 };
213 });
214 }
215
216
217
218
219 @Override
220 public void run(){
221 zeitHerunterzaehlen();
222 }
223 public void startActivity(){
224 startActivity(new Intent(this,GameActivity.class));
225 }
226
227
228
229 @Override
230 public void onDestroy() {
231 mp.release();
232 super.onDestroy();
233 }
234
235
236
237 }

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!