Button Funktionen bei Master/Detail Flow

  • Antworten:24
Lars
  • Forum-Beiträge: 13

20.07.2013, 16:28:07 via Website

Hallo,
nach dem mir ja schon erfolgreich bei meinem problem mit den Listenern bei den Buttons geholfen wurde habe ich direkt eine neue Frage die der alten ähnelt.
Es geht darum das ich für jeden Punkt in der Liste ein eigenes Layout nutzen möchte, das ist auch das kleinere übel.
1@Override
2 public View onCreateView(LayoutInflater inflater, ViewGroup container,
3 Bundle savedInstanceState) {
4
5 View rootView = inflater.inflate(R.layout.fragment_item_detail,
6 container, false);
7
8 // Show the dummy content as text in a TextView.
9 if (mItem != null) {
10 switch(mItem.layout)
11 {
12 case 1:
13 rootView = inflater.inflate(R.layout.fragment_item_detail_01,
14 container, false);
15 break;
16 case 2:
17 rootView = inflater.inflate(R.layout.fragment_item_detail,
18 container, false);
19 break;
20 case 3:
21 rootView = inflater.inflate(R.layout.fragment_item_detail,
22 container, false);
23 break;
24 }
25 }
26
27 return rootView;
28 }

Ich weis es ist keine schöne lösung aber mir ist keine bessere bekannt als neuling :blink:
Nun zu meinem eigentlichen problem:
Wo kommen jetzt die funktionen der einzelnen layout's hinn ? Ich habe schon etwas rumprobiert , bisher bin ich aber gescheitert.
Ich suche die stelle von den einzelnen Layouts an denen normalerweise "public class MainActivity extends Activity {" steht

— geändert am 20.07.2013, 16:28:48

Antworten
Michele
  • Forum-Beiträge: 1.525

20.07.2013, 16:37:24 via Website

Hallo Lars.

Mach doch einfach für jeden Punkt eine neue/extra Activity auf.

Für Anfänger ist das einfacher.

Oder verstehe ich deine Idee/sorge falsch?



LG

— geändert am 20.07.2013, 16:38:52

Antworten
Lars
  • Forum-Beiträge: 13

20.07.2013, 16:45:09 via Website

Wie rufe ich die Acitivity den dann auf ? Es ist mein erstes Master/Detail Flow projekt und mir ist die Struktur noch realtiv Unbekannt.
Mein Ziel ist es mehrere einzelne Apps zu einer zusammenzusetzen.

EDIT: Manchmal ist es einfacher als man denkt.
Ein fach unter "public void onItemSelected(String id) {" ein switch mit der ID richtig ?

Kann ich dann die normale Acitivity von meinen standalone Apps nutzen oder muss ich die aus "ItemDetailFragment" nutzen ?

— geändert am 20.07.2013, 16:48:20

Antworten
Michele
  • Forum-Beiträge: 1.525

20.07.2013, 16:55:38 via Website

Bisschen solltest du aber schon selbst rum gucken und lernen.

Eine neue Activity starten per Button z.B ist einfach.


1Intent intent= new Intent(this, ActivityTwo.class);
2 startActivity(intent);

Und dann noch in der AndroidManifest.xml die Activity eintragen.

Aber wie ich sehe willst du ja deine Apps zusammen basteln.
Sowas habe ich natürlich noch nicht gemacht.



LG

— geändert am 20.07.2013, 16:58:40

Antworten
Lars
  • Forum-Beiträge: 13

20.07.2013, 16:57:42 via Website

Naja das Starten ist weniger das Problem, ich wüsste auch wo.
Nur der Aufbau der neuen Activity , muss ich da etwas beachten ?

Weil ich möchte ja auch weiterhin die "zurück" funktion nutzen können.

— geändert am 20.07.2013, 16:58:24

Antworten
Michele
  • Forum-Beiträge: 1.525

20.07.2013, 16:59:43 via Website

Lars
Naja das Starten ist weniger das Problem, ich wüsste auch wo.
Nur der Aufbau der neuen Activity , muss ich da etwas beachten ?

Weil ich möchte ja auch weiterhin die "zurück" funktion nutzen können.

Versuch es doch erstmal bevor du fragst.

Logisch kannst du die zurück funktion nutzen und kommst auf deine vorige Activity zurück.


LG

Antworten
Lars
  • Forum-Beiträge: 13

20.07.2013, 17:05:03 via Website

Ich habe mal rumprobiert und bin leider gescheitert.
Ich wollte in der "ItemListActivity" unter "onItemSelected" die Activity MainActivity (Aus einem anderem projekt kopiert) starten, allerdings crasht die App dann :unsure:

Naja ich probier mal noch ein wenig rum

— geändert am 20.07.2013, 17:05:55

Antworten
Michele
  • Forum-Beiträge: 1.525

20.07.2013, 17:18:00 via Website

Etwa wir reden aneinander vorbei oder ich verstehe noch nicht ganz was du vor hast.

Vielleicht hilft dir wer später genauer.

Zeig mal deine LogCat.
So weiß man mehr wenn deine App crasht.



LG

— geändert am 20.07.2013, 17:18:57

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

20.07.2013, 18:27:05 via Website

Mein Eindruck ist, das er mit Fragments experimentiert, also zwei Ansichten auf dem Schirm haben möchte: links die Liste, rechts ein weiteres Layout, abhängig vom selektierten Listeneintrag.

@Lars: Wenn meine obige Vermutung korrekt ist: Dazu gibts im SDK ein schönes Beispiel-Projekt, in dem exakt das gezeigt wird, und auch wie man beides (also Fragments auf hinreichend großen Screens, neue Activity auf "kleinen" Screens).
Mit "raten" kommst du da nicht weiter.

Antworten
Lars
  • Forum-Beiträge: 13

21.07.2013, 06:18:26 via Website

Naja fast

Ich möchte ein Menü haben in dem ich eine Funktion wähle und wen ich eine Funktion gewählt habe soll ein neues Fenster in der App kommen mit der jeweiligen Funktion. Wobei es dann aber auch noch einen Zurück Button geben soll.
Exakt so wie wenn man bei Eclipse ein "Master/Detail Flow" Projekt erstellt.
Nur komme ich noch nicht so ganz damit klar wo ich dann für jede neue "Seite"´die funktionen hinpacken muss.

Hoffe jetzt ist es klarer was ich meine :V

Antworten
Michele
  • Forum-Beiträge: 1.525

21.07.2013, 14:20:10 via Website

Hallo Lars.


Also. Du musst dich schon mal besser ausdrücken.
Erst hieß es du willst von App zu App wechseln oder zusammen zusetzen.

Eine App ist eine App. Activitys sind in der App.

Also wenn du zwischen mehreren Activitys in der App wechseln willst, dann
kannst du das so machen wie ich dir z.B das sagte.

Jede Activity hat dann ein eigenes Layout.

Oder du machst es so wie @and dev es sagte.


LG

— geändert am 21.07.2013, 14:22:22

Antworten
Lars
  • Forum-Beiträge: 13

21.07.2013, 14:45:21 via Website

Ich wollte von Anfang an von Activity zu Activity wechseln und in dem Thread ging es eigentlich nur darum wo der Code für die Buttons (Wenn ich z.b. android:onClick="ButtonClick" eintrage) hinn muss. Mehr nicht. Alles andere FUnktioniert schon längst.
Wie du meinst verstehe ich nicht so ganz, ich weis das man so eine Activity einbindet aber dann bekomme ich viele Fehler da ich wahrscheinlich eine total falsche Grundstruktur habe. Ordentliche Beispiele gibt es dazu leider nicht.
Nur so ein unnützes Tutorial wie man mit dem Master/Detail Flow Webseiten aurufen kann , aber nichts mit Buttons.

— geändert am 21.07.2013, 14:47:03

Antworten
Michele
  • Forum-Beiträge: 1.525

21.07.2013, 14:54:59 via Website

Dann sag es doch gleich so. So versteht man dich auch.:D

Und schwer ist es nicht bei Google eine Button Methode zu finden. Oder?

1@Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.activity_main);
5
6 Button button = (Button)findViewById(R.id.button);
7 button.setOnClickListener(this);
8
9 }
10
11 @Override
12 public void onClick(View view) {
13
14// Dein Code was passieren soll, wenn der Button gedrückt wird.
15// Z.B eine neue Activity Starten wie du möchtest.
16
17 }

Oder bei Google einfach mal "Android Button Methode" eingeben.


Zum fehler. Ohne LogCat kann DIR keiner hier weiterhelfen.
Und in dein letzten Thread wurde dir doch schon wegen dein Button geholfen.



LG

— geändert am 21.07.2013, 15:05:25

Antworten
Lars
  • Forum-Beiträge: 13

21.07.2013, 18:47:32 via Website

Ich habe bereits Apps geschrieben und weis wie das Funktioniert.
Allerdings wen ich den Code in der Activity plaziere (In meinem Fall die Funktion buttonClick , durch android:onClick="buttonClick") Stürtzt die App ab.
Deswegen habe ich ja gesagt es ähnelt dem nur, denn ich weis nicht WO ich die funktion plazieren muss.
LogCAT kommt gleich

Also folgende Situation :

res/layout/fragment_item_detail_app1.xml (auszug)
1<Button
2 android:id="@+id/button_7"
3 android:layout_width="80dip"
4 android:layout_height="100dip"
5 android:layout_below="@+id/anzeigeWerte"
6 android:text="7"
7 android:onClick="buttonClick" />

src/com.example.app/ItemDetailActivity.java (auszug)
1public class ItemDetailActivity extends FragmentActivity {
2
3 private EditText werteAnzeige;
4 private int zahl1;
5 private int zahl2;
6 private int ergebnis;
7 private int operator;
8
9 @Override
10 protected void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.activity_item_detail);
13
14 // Show the Up button in the action bar.
15 getActionBar().setDisplayHomeAsUpEnabled(true);
16
17 werteAnzeige = (EditText)findViewById(R.id.anzeigeWerte);
18 ...
19
20 public void buttonClick(View v) {
21 switch(v.getId()){
22
23 case R.id.button_7:
24 werteAnzeige.append("7");
25 break;
26 }


Hier der Fehler
107-21 18:55:57.450: W/dalvikvm(11970): threadid=1: thread exiting with uncaught exception (group=0x40e481f8)
207-21 18:55:57.470: E/AndroidRuntime(11970): FATAL EXCEPTION: main
307-21 18:55:57.470: E/AndroidRuntime(11970): java.lang.IllegalStateException: Could not execute method of the activity
407-21 18:55:57.470: E/AndroidRuntime(11970): at android.view.View$1.onClick(View.java:3054)
507-21 18:55:57.470: E/AndroidRuntime(11970): at android.view.View.performClick(View.java:3521)
607-21 18:55:57.470: E/AndroidRuntime(11970): at android.view.View$PerformClick.run(View.java:14185)
707-21 18:55:57.470: E/AndroidRuntime(11970): at android.os.Handler.handleCallback(Handler.java:605)
807-21 18:55:57.470: E/AndroidRuntime(11970): at android.os.Handler.dispatchMessage(Handler.java:92)
907-21 18:55:57.470: E/AndroidRuntime(11970): at android.os.Looper.loop(Looper.java:137)
1007-21 18:55:57.470: E/AndroidRuntime(11970): at android.app.ActivityThread.main(ActivityThread.java:4464)
1107-21 18:55:57.470: E/AndroidRuntime(11970): at java.lang.reflect.Method.invokeNative(Native Method)
1207-21 18:55:57.470: E/AndroidRuntime(11970): at java.lang.reflect.Method.invoke(Method.java:511)
1307-21 18:55:57.470: E/AndroidRuntime(11970): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:822)
1407-21 18:55:57.470: E/AndroidRuntime(11970): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:589)
1507-21 18:55:57.470: E/AndroidRuntime(11970): at dalvik.system.NativeStart.main(Native Method)
1607-21 18:55:57.470: E/AndroidRuntime(11970): Caused by: java.lang.reflect.InvocationTargetException
1707-21 18:55:57.470: E/AndroidRuntime(11970): at java.lang.reflect.Method.invokeNative(Native Method)
1807-21 18:55:57.470: E/AndroidRuntime(11970): at java.lang.reflect.Method.invoke(Method.java:511)
1907-21 18:55:57.470: E/AndroidRuntime(11970): at android.view.View$1.onClick(View.java:3049)
2007-21 18:55:57.470: E/AndroidRuntime(11970): ... 11 more
2107-21 18:55:57.470: E/AndroidRuntime(11970): Caused by: java.lang.NullPointerException
2207-21 18:55:57.470: E/AndroidRuntime(11970): at com.example.mathpad.ItemDetailActivity.buttonClick(ItemDetailActivity.java:180)
2307-21 18:55:57.470: E/AndroidRuntime(11970): ... 14 more

Zeile 180 ist werteAnzeige.append("7"); , mein Fehler scheint doch woanders zu liegen

— geändert am 21.07.2013, 18:59:31

Antworten
Michele
  • Forum-Beiträge: 1.525

21.07.2013, 22:48:01 via Website

Dann nehm doch einfach meine Button Methode.

Da brauchst du die android:onClick="buttonClick" nicht.

Wenn du das wüsstest wie du es sagtest, würdest du nicht fragen.:D


Und siehst ja nun selbst das es wohl wo anders dran liegen könnte.
LogCat bringt dir halt was.:D


LG

— geändert am 21.07.2013, 22:52:13

Antworten
Christian
  • Forum-Beiträge: 307

21.07.2013, 23:17:42 via Website

Hi Lars,

das Button Handling sieht soweit in Ordnung aus.

Deine View EditText werteAnzeigen ist Null das heißt in der Regel das das werteAnzeige = (EditText)findViewById(R.id.anzeigeWerte); nicht geklappt hat (vorraus gesetzt du setzt werteAnzeigen nicht irgendwo neu).

Steht EditText werteAnzeigen in diesem Layout: R.layout.activity_item_detail?

EDIT:
Weil in deiner Pfad Angabe steht ein ganz anderes Layout. Ist das jetzt hier ein Tippfehler oder benutzt du das falsche Layout?
res/layout/fragment_item_detail_app1.xml (auszug)

Mfg Christian

— geändert am 21.07.2013, 23:36:15

Antworten
Michele
  • Forum-Beiträge: 1.525

22.07.2013, 00:28:43 via Website

Christian Hempe
Hi Lars,

das Button Handling sieht soweit in Ordnung aus.

Deine View EditText werteAnzeigen ist Null das heißt in der Regel das das werteAnzeige = (EditText)findViewById(R.id.anzeigeWerte); nicht geklappt hat (vorraus gesetzt du setzt werteAnzeigen nicht irgendwo neu).

Steht EditText werteAnzeigen in diesem Layout: R.layout.activity_item_detail?

EDIT:
Weil in deiner Pfad Angabe steht ein ganz anderes Layout. Ist das jetzt hier ein Tippfehler oder benutzt du das falsche Layout?
res/layout/fragment_item_detail_app1.xml (auszug)

Mfg Christian

Jetzt wo du es sagst...

Denke auch ist falsches Layout.

Das gleiche Problem hatte ich ja auch erst.


LG

— geändert am 22.07.2013, 00:37:50

Antworten
Lars
  • Forum-Beiträge: 13

22.07.2013, 07:36:21 via Website

Christian Hempe
Hi Lars,

das Button Handling sieht soweit in Ordnung aus.

Deine View EditText werteAnzeigen ist Null das heißt in der Regel das das werteAnzeige = (EditText)findViewById(R.id.anzeigeWerte); nicht geklappt hat (vorraus gesetzt du setzt werteAnzeigen nicht irgendwo neu).

Steht EditText werteAnzeigen in diesem Layout: R.layout.activity_item_detail?

EDIT:
Weil in deiner Pfad Angabe steht ein ganz anderes Layout. Ist das jetzt hier ein Tippfehler oder benutzt du das falsche Layout?
res/layout/fragment_item_detail_app1.xml (auszug)

Mfg Christian

Ich habe das "falsche" layout , dieses wird aber auch angezeigt. Wie gesagt ich bin noch sehr neu und habe folgendes versucht :

ItemDetailFragment.java
1@Override
2 public View onCreateView(LayoutInflater inflater, ViewGroup container,
3 Bundle savedInstanceState) {
4
5 View rootView = inflater.inflate(R.layout.fragment_item_detail,
6 container, false);
7
8 // Show the dummy content as text in a TextView.
9 if (mItem != null) {
10 switch(mItem.layout)
11 {
12 case 1:
13 rootView = inflater.inflate(R.layout.fragment_item_detail_01,
14 container, false);
15 break;
16 case 2:
17 rootView = inflater.inflate(R.layout.fragment_item_detail,
18 container, false);
19 break;
20 case 3:
21 rootView = inflater.inflate(R.layout.fragment_item_detail,
22 container, false);
23 break;
24 }
25 }
26
27 return rootView;
28 }
29}

Habe ich in ItemDetailActivity.java irgendwelche Infos in welchen Tab ich bin ? (wie bei ItemDetailFragment mit mItem)
Wobei mir im nachhinein jetzt auch an den Namen auffällt das es Falsch sein muss.

Und wen ich jetzt anstatt
setContentView(R.layout.activity_item_detail); -> setContentView(R.layout.fragment_item_detail_01);
mache stürtzt meine App immer ab beim klick auf ein listen Item.

— geändert am 22.07.2013, 07:44:48

Antworten
Michele
  • Forum-Beiträge: 1.525

22.07.2013, 07:58:39 via Website

Hallo Lars.

Nicht "fragment_item_detail_01"

sondern

"fragment_item_detail_app1"


Siehe von dir hier:

Lars

Also folgende Situation :

res/layout/fragment_item_detail_app1.xml (auszug)
1<Button
2 android:id="@+id/button_7"
3 android:layout_width="80dip"
4 android:layout_height="100dip"
5 android:layout_below="@+id/anzeigeWerte"
6 android:text="7"
7 android:onClick="buttonClick" />




LG

— geändert am 22.07.2013, 11:07:00

Antworten
Lars
  • Forum-Beiträge: 13

22.07.2013, 10:45:45 via Website

Hatte mich oben nur vertan ... im code steht das selbe

— geändert am 22.07.2013, 10:45:55

Antworten
Michele
  • Forum-Beiträge: 1.525

22.07.2013, 11:06:46 via Website

Hast du es denn nun hinbekommen oder was ist nun noch dein Problem?



LG

Antworten
Lars
  • Forum-Beiträge: 13

22.07.2013, 11:15:05 via Website

Das problem welches ich auf der 1. Seite ganz unten gepostet habe.

Antworten
Michele
  • Forum-Beiträge: 1.525

22.07.2013, 11:34:05 via Website

Lars
Das problem welches ich auf der 1. Seite ganz unten gepostet habe.

Poste einfach dein kompletten Code oder lad dein kompletten Code hoch usw.

Damit endlich dir mal einer Hilft :D


LG

— geändert am 22.07.2013, 11:34:53

Antworten