Wechsel von Landscape auf Portrait

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

29.07.2010, 02:20:47 via Website

Es geht um folgenden Code:
1public class Timetable extends Activity {
2
3 private DatabaseHelper db = new DatabaseHelper(this);
4 /** Called when the activity is first created. */
5 @Override
6 public void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.main);
9 db.getReadableDatabase();
10
11
12 SharedPreferences settings = getSharedPreferences("settings", 0);
13 Integer hours = settings.getInt("stunden", 10);
14 // Get display for detecting the phone orientation
15 Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
16//
17// // Get the orientation
18 int orientation = display.getRotation();
19
20 if (orientation == 0 || orientation == 2) {
21 for (Integer i = 1 ; i <= hours ; i++) {
22 TableLayout tl = (TableLayout)findViewById(R.id.timetable);
23 TableRow tr = new TableRow(this);
24 tr.setLayoutParams(new LayoutParams(
25 LayoutParams.FILL_PARENT,
26 LayoutParams.WRAP_CONTENT));
27
28 TextView zahl = new TextView(this);
29 zahl.setText(i.toString());
30 zahl.setLayoutParams(new TableRow.LayoutParams(
31 LayoutParams.FILL_PARENT,
32 LayoutParams.WRAP_CONTENT));
33
34 tr.addView(zahl);
35
36 TextView zahl2 = new TextView(this);
37 zahl2.setText("1");
38 zahl2.setLayoutParams(new TableRow.LayoutParams(
39 LayoutParams.FILL_PARENT,
40 LayoutParams.WRAP_CONTENT));
41
42 tr.addView(zahl2);
43
44 tl.addView(tr);
45
46 }
47 } else {
48 //TODO: add dynamic row implementation for landscape
49
50 }
51//
52
53 }

Soll folgendes machen. Ich muss für meinen Stundenplan die Row's dynamisch generieren. Ist das Handy im Portrait modus dann ist es die Ansicht des heutigen Tages, ist es im Landscape soll die ganze woche dargestellt werden. Startet man nun das Programm im Portrait funktioniert alles, es werden 10 rows generiert.
Wechselt man dann auf Landscape passiert auch das richtige, nämlich das keine Rows generiert werden, Wechselt man dann jedoch wieder zurück auf Portrait dann stürzt das Programm ab.
Der Fehler tritt bei der Zeile:
tl.addView(tr)
auf. Laut eclipse debugger wird dort eine NullPointerException geworfen. Kann mir wer weiterhelfen, wie ich es zum laufen kriege?

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

29.07.2010, 02:55:47 via Website

Anscheinend liest du dennoch XML je nach Orientierung, daher tippe Ich drauf das du in einem der Modi etwas vergessen hast ? Doch das sollte an sich schon beim ersten lesen passieren.

Allerdings lässt sich das nicht genau sagen, liegt wohl auch am Gerät selbst was man so zurückbekommen kann: http://developer.android.com/intl/zh-CN/reference/android/view/Display.html#getRotation%28%29

Ich würde weiterhin abraten sog. "magic numbers" im Code zu verwenden, verwende stattdessen lieber die Konstanten was es deutlich lesbarer/nachvollziehbarer machen sollte! also : Surface.ROTATION_0 , Surface.ROTATION_90, Surface.ROTATION_180, Surface.ROTATION_270

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: 51

29.07.2010, 11:13:36 via Website

Mac Systems
Anscheinend liest du dennoch XML je nach Orientierung, daher tippe Ich drauf das du in einem der Modi etwas vergessen hast ? Doch das sollte an sich schon beim ersten lesen passieren.

Allerdings lässt sich das nicht genau sagen, liegt wohl auch am Gerät selbst was man so zurückbekommen kann: http://developer.android.com/intl/zh-CN/reference/android/view/Display.html#getRotation%28%29

Ich würde weiterhin abraten sog. "magic numbers" im Code zu verwenden, verwende stattdessen lieber die Konstanten was es deutlich lesbarer/nachvollziehbarer machen sollte! also : Surface.ROTATION_0 , Surface.ROTATION_90, Surface.ROTATION_180, Surface.ROTATION_270

Ja es gibt für beide Modi eine eigene XML. was meinst du mit in einem modi was vergessen?
Das mit den Konstanten werd ich ausbessern, danke

/edit
OK neue erkenntnis. Hab in der Zwischenzeit die Methode getRotation auf getOrientation geändert weil ich gesehen hab das getRotation erst ab API Level 8 existiert. Habs dann auf meinem HTC Legend probiert, dort gibt es keinen Absturz wenn ich von Landscape auf Portrait wechsel, beim Emulator weiterhin

/edit2
Problem gelöst, ich habe jetzt gelesen das man Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); nicht verwenden sollte, da es ein Low Level Zugriff ist.
Stattdessen habe ich jetzt : int orientation = getResources().getConfiguration().orientation; verwendet. Nun funktionierts.

— geändert am 29.07.2010, 11:47:47

Antworten