Hilfe auf developer.android gebraucht...

  • Antworten:10
  • Bentwortet
Fabian
  • Forum-Beiträge: 144

11.10.2013, 23:25:02 via Website

Hey liebe Community,

ich brauche Hilfe bei einem simplen Vergehen.
Ich möchte 2 Tabs in meine App einbauen. Der eine Tab zeigt ein Bild und nen Text und in dem anderen möchte ich einige Einstellungen verwalten können.
Leider hört sich das leichter an, als wie es ist.
Habe hier verschiedene Seiten mit dem gleichen Ziel gefunden!?
1. http://developer.android.com/training/implementing-navigation/lateral.html
2. http://developer.android.com/guide/topics/ui/actionbar.html#Tabs

Welches ist jetzt das richtige, weil der Code auch unterschiedlich ist...
Ich möchte einfach nur oben 2 Tabs wie in bsp. Firefox haben. Muss ich dann 2 Layouts erstellen oder wie läuft das mit den Fragments?
Wäre um jede Hilfe dankbar!

edit: Das Problem ließ sich durch ein anderes Forum lösen, weiterhin frage ich mich allerdings, wie man Inhalte in die tabs einfügen kann?

— geändert am 12.10.2013, 14:19:33

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

12.10.2013, 12:18:32 via Website

Versuche doch einfach mal zu verstehen was fragments genau sind, probiere es aus ;)

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

Antworten
Fabian
  • Forum-Beiträge: 144

12.10.2013, 17:16:35 via Website

Hey Mac Systems,

ich sitze nun seit 4 Std. drann und komme nicht weiter :(

Die Main:
1package de.UseFlashLight.flashbynotifications;
2
3import android.app.ActionBar;
4import android.app.Activity;
5import android.app.Fragment;
6import android.app.FragmentManager;
7import android.app.FragmentTransaction;
8import android.os.Bundle;
9import android.view.Menu;
10
11public class FlashByNotifications extends Activity {
12
13 ActionBar actionBar;
14 FragmentManager fragmentManager;
15 FragmentTransaction fragmentTransaction;
16
17 @Override
18 protected void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.activity_flash_by_notifications);
21
22 fragmentManager = getFragmentManager();
23 fragmentTransaction = fragmentManager.beginTransaction();
24
25 actionBar = getActionBar();
26 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
27 actionBar.setDisplayShowHomeEnabled(false);
28 actionBar.setDisplayShowTitleEnabled(false);
29
30 Fragment fragment_Flash_By_Notifications = new Fragment_Flash_By_Notifications();
31 Fragment fragment_Settings = new Fragment_Settings();
32
33 ActionBar.Tab Tab_Flash_By_Notifications = actionBar.newTab()
34 .setText("Hintergrund")
35 .setTabListener(new MyTabListener(fragment_Settings));
36 ActionBar.Tab Tab_Settings = actionBar.newTab()
37 .setText("Einstellungen")
38 .setTabListener(new MyTabListener(fragment_Settings));
39
40 actionBar.addTab(Tab_Flash_By_Notifications);
41 actionBar.addTab(Tab_Settings);
42 }
43
44 @Override
45 public boolean onCreateOptionsMenu(Menu menu) {
46 // Inflate the menu; this adds items to the action bar if it is present.
47 getMenuInflater().inflate(R.menu.flash_by_notifications, menu);
48 return true;
49 }
50
51}

Die Fragmente:

1package de.UseFlashLight.flashbynotifications;
2
3import android.app.Fragment;
4import android.os.Bundle;
5import android.view.LayoutInflater;
6import android.view.View;
7import android.view.ViewGroup;
8
9public class Fragment_Flash_By_Notifications extends Fragment {
10
11 @Override
12 public View onCreateView(LayoutInflater inflater, ViewGroup container,
13 Bundle savedInstanceState) {
14 // TODO Auto-generated method stub
15 return inflater.inflate(R.layout.activity_flash_by_notifications, container);
16 }
17
18}

und

1package de.UseFlashLight.flashbynotifications;
2
3import android.app.Fragment;
4import android.os.Bundle;
5import android.view.LayoutInflater;
6import android.view.View;
7import android.view.ViewGroup;
8
9public class Fragment_Settings extends Fragment {
10
11 @Override
12 public View onCreateView(LayoutInflater inflater, ViewGroup container,
13 Bundle savedInstanceState) {
14 // TODO Auto-generated method stub
15 return inflater.inflate(R.layout.activity_settings, container);
16 }
17
18}

und der TabListener:

1package de.UseFlashLight.flashbynotifications;
2
3import android.app.ActionBar;
4import android.app.ActionBar.Tab;
5import android.app.Fragment;
6import android.app.FragmentTransaction;
7
8public class MyTabListener implements ActionBar.TabListener {
9
10 Fragment fragment;
11
12 public MyTabListener(Fragment fragment) {
13 this.fragment = fragment;
14 }
15
16 @Override
17 public void onTabReselected(Tab tab, FragmentTransaction ft) {
18 }
19
20 @Override
21 public void onTabSelected(Tab tab, FragmentTransaction ft) {
22 ft.add(fragment, "1");
23 }
24
25 @Override
26 public void onTabUnselected(Tab tab, FragmentTransaction ft) {
27 ft.remove(fragment);
28 }
29
30}

Wenn ich jetzt zwischen den Tabs wechsle, passiert aber nichts und mir wird immer nur die eine TextView angezeigt, obwohl in dem anderen Fragment eine CheckBox ist.

Projekt zum downloaden, falls noch die Layouts fehlen:
http://www.file-upload.net/download-8170179/FlashByNotifications.zip.html

Vielen Dank erstmal :D

grüße Fabian

— geändert am 12.10.2013, 17:19:26

Antworten
Fabian
  • Forum-Beiträge: 144

13.10.2013, 14:42:03 via App

Tut mir leid aber: Hiiilllfeee.... Muss die Wochr wieder arbeiten und würde gerne noch fertig werden...
Ich weiß, dass pushen nicht erlaubt ist aber es tut doch manchmal ganz gut die Regeln zu brechen ♣★■:O ;-)

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

13.10.2013, 14:49:55 via App

mach ein layout das die beiden tabs beinhaltet
setze dann das layout "visable auf false"
dann erstellst du dir im selben layout nochmals ein layout und gestaltest sie so wie du sie haben willst. und wieder "visable auf false" und dann nochmals das selbe.
wenn du fertig bist, setzt du das erste layout auf "visable auf true"
und dann must du nur noch in der main activity festlegen wann welches layout sichtbar sein soll und wann nicht. ps googeln und ausprobieren hilft mehr als wenn du den kompletten script verlangst.. so gings auch bei mir...

Antworten
Fabian
  • Forum-Beiträge: 144

13.10.2013, 15:49:40 via Website

Hey divide 94,

dass Problem besteht einfach darin, dass ich zich verschiedene Ansätze im Internet finde und manchmal Code lese, den ich überhaupt nicht verstehe.
Eben haben ich mir ein Beispielprojekt von developer.android runtergeladen und in Eclipse importiert, abgesehen von dem unleserlichen Code hatte ich 57 Fehler darin. Wieso stellen die "kaputten" Code zur Verfügung?

Darf ich fragen, wie lange du schon programmierst und ob du Bücher benutzt hast?

Ich komme einfach seit Wochen nicht weiter -.-

grüße Fabian!

— geändert am 13.10.2013, 15:53:15

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

13.10.2013, 20:49:11 via App

Fabian
Hey divide 94,

dass Problem besteht einfach darin, dass ich zich verschiedene Ansätze im Internet finde und manchmal Code lese, den ich überhaupt nicht verstehe.
Eben haben ich mir ein Beispielprojekt von developer.android runtergeladen und in Eclipse importiert, abgesehen von dem unleserlichen Code hatte ich 57 Fehler darin. Wieso stellen die "kaputten" Code zur Verfügung?

Darf ich fragen, wie lange du schon programmierst und ob du Bücher benutzt hast?

Ich komme einfach seit Wochen nicht weiter -.-

grüße Fabian!
ich programmiere seit 4 jahren ca. und ja ich habe mir bücher gekauft aber bringt nicht viel. ich arbeite mit codes aus dem internet.
abändern bis sie hald passen.

Antworten
impjor
  • Forum-Beiträge: 1.793

13.10.2013, 21:19:01 via App

Je nach Level gibt es einfach keine Bücher mehr, die sich lohnen würden zu kaufen, da es (bessere, teilweise aber auch schlechte) Dokus, Tutorials, Code Snippets, ... gibt.
Gerade als Anfänger empfehle ich aber unbedingt (e-)Bücher. Oft können Tutoren nicht verständlich die Basics vermitteln und du bist versucht einfach nur den Code zu kopieren und halt irgendwie passend zu machen... da lernt man aber (fast) nichts.
Am Anfang sollte man unbedingt jede Codezeile verstehen und wissen wozu diese genommen wird. Natürlich spricht nichts gegen ergänzende Tutorials, aber ein Java-Grundlagen-Buch solltest du dir unbedingt mal ansehen, dann geht das Lernen mMn schneller.
LG

Liebe Grüße impjor.

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

Antworten
Fabian
  • Forum-Beiträge: 144

13.10.2013, 21:19:20 via Website

Ah ok, so mache ich es derzeit auch, meine Bücher liegen hier rum, weil sie einfach nur grottenschlecht sind...

Mein Problem ist erstmal gelößt, bis das nächste auftaucht. Ich pack das mal hier rein, bevor ich wieder ein Thread aufmache:

Bekomme bei Zeile 51 eine NullPointerException, habs schon mit: Switch switch = (Switch) view.findViewById(R.id.switch) ausprobiert, geht aber leider nicht...

Code:
1@Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.activity_main);
5
6 context = getBaseContext();
7
8 actionBar = getActionBar();
9 actionBar.hide();
10 tabHost = getTabHost();
11
12 // BlitzLeuchte-Tab
13 intent = new Intent(this, DieBlitzLeuchte.class);
14 theSpec = tabHost.newTabSpec("einleitung")
15 .setIndicator("Einleitung/Hintergrund")
16 .setContent(intent);
17 tabHost.addTab(theSpec);
18
19 // Einstellungs-Tab
20 intent = new Intent(this, Einstellungen.class);
21 theSpec = tabHost.newTabSpec("einstellungen")
22 .setIndicator("Einstellungen")
23 .setContent(intent);
24 tabHost.addTab(theSpec);
25
26 statusCall = (Switch)findViewById(R.id.statuscall);
27 statusSMS = (Switch)findViewById(R.id.statussms);
28 statusCall.setOnCheckedChangeListener(new ToggleButtons(1, context));
29 statusSMS.setOnCheckedChangeListener(new ToggleButtons(2, context));
30
31 checkFlashLightAvailable();
32 }

impjor@ Ich habe mein Gallileo Java Grundlagen Buch schon durch. Bis auf die Grafischen Dinge, da ich sowieso nur Android machen möchte.
Außerdem habe ich das Buch: Handbuch der Java-Programmierung bis Seite 300 durchgelesen und fast alles verstanden :)

— geändert am 13.10.2013, 21:21:15

Antworten
Fabian
  • Forum-Beiträge: 144

13.10.2013, 21:41:12 via Website

Hier wäre es Zeile 53...

1package de.Notification.notificationflash;
2
3import android.app.ActionBar;
4import android.app.TabActivity;
5import android.content.Context;
6import android.content.Intent;
7import android.content.pm.PackageManager;
8import android.os.Bundle;
9import android.view.Menu;
10import android.widget.CompoundButton;
11import android.widget.CompoundButton.OnCheckedChangeListener;
12import android.widget.Switch;
13import android.widget.TabHost;
14import android.widget.Toast;
15
16@SuppressWarnings("deprecation")
17public class MainActivity extends TabActivity implements OnCheckedChangeListener{
18
19 private ActionBar actionBar;
20 private TabHost tabHost;
21 private TabHost.TabSpec theSpec;
22 private Intent intent;
23 private static Switch statusCall, statusSMS;
24 private static Context context;
25
26 @Override
27 protected void onCreate(Bundle savedInstanceState) {
28 super.onCreate(savedInstanceState);
29 setContentView(R.layout.activity_main);
30
31 context = getBaseContext();
32
33 actionBar = getActionBar();
34 actionBar.hide();
35 tabHost = getTabHost();
36
37 // BlitzLeuchte-Tab
38 intent = new Intent(this, DieBlitzLeuchte.class);
39 theSpec = tabHost.newTabSpec("einleitung")
40 .setIndicator("Einleitung/Hintergrund")
41 .setContent(intent);
42 tabHost.addTab(theSpec);
43
44 // Einstellungs-Tab
45 intent = new Intent(this, Einstellungen.class);
46 theSpec = tabHost.newTabSpec("einstellungen")
47 .setIndicator("Einstellungen")
48 .setContent(intent);
49 tabHost.addTab(theSpec);
50
51 statusCall = (Switch)findViewById(R.id.statuscall);
52 statusSMS = (Switch)findViewById(R.id.statussms);
53 statusCall.setOnCheckedChangeListener(new ToggleButtons(1, context));
54 statusSMS.setOnCheckedChangeListener(new ToggleButtons(2, context));
55
56 checkFlashLightAvailable();
57 }

— geändert am 14.10.2013, 10:58:02

Antworten