scrollende Textview

  • Antworten:13
M. Neumann
  • Forum-Beiträge: 14

01.10.2012, 22:28:16 via Website

Hallo,

ich habe wahrscheinlich ein Problem mit ganz simpler Lösung.
Und zwar habe ich aus dem Internet ein kleines Layout gezogen um eine Textview scrollen zu können.

Meine main.xml:
1<?xml version="1.0" encoding="utf-8"?>
2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7
8 <ScrollView
9 android:id="@+id/ScrollView01"
10 android:layout_width="match_parent"
11 android:layout_height="match_parent"
12 android:layout_below="@+id/DownloadData" >
13
14 <TextView
15 android:text="Text here..."
16 android:id="@+id/textViewWithScroll"
17 android:layout_width="match_parent"
18 android:layout_height="match_parent"/>
19
20 </ScrollView>
21
22</RelativeLayout>

Wenn ich nun statt
1this.text = new TextView(this);
im Hauptdokument
1this.text = (TextView) this.findViewById(R.id.textViewWithScroll);
mache, hängt sich die App auf.

R.id.textViewWithScroll findet er eigentlich...
Habe ich noch etwas vergessen?


Grober Code:
1public class xyz extends Activity {
2 /** Called when the activity is first created. */
3 TextView text;
4 @Override
5
6 public void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.main);
9 //this.text = (TextView) this.findViewById(R.id.textViewWithScroll); // Das geht nicht!
10 this.text = new TextView(this); // Das geht!
11
12//Hier wird text befüllt. Ab hier funktioniert alles.
13}
Vielen Dank im voraus!

Gruß

Antworten
M. Neumann
  • Forum-Beiträge: 14

02.10.2012, 17:47:56 via Website

Nö, nö, das geht nicht.
Hab auch auf beiden Seiten mal das this. weggelassen -> Erfolg blieb aus.

gecleant habe ich auch schon mehrmals und jetzt auch noch ein paarmal. Das müsste doch echt gehen...

Ich weiß nicht, woran es noch liegen kann... die main.xml ist ja richtig so, oder?

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

02.10.2012, 18:57:24 via Website

Muß nicht immer innerhalb des ScrollViews eine anders Layout (z.B. LinearLayout) sein.
Über die GUI wird das immer mit angelegt.

Antworten
M. Neumann
  • Forum-Beiträge: 14

02.10.2012, 19:18:01 via Website

Das muss hier doch schonmal jemand gemacht haben?^^
Mir geht es bloß um einen Scrollbalken...und damit soll man den "einfach" hinbekommen.

Also eine ScrollView01 hab ich im Code auch nicht extra angelegt (also erzeuge keine mit "new").
Muss ich wohl nochmal nachlesen wie das mit den ScrollViews läuft, wenn damit hier anscheinend noch kaum jemand handiert hat (aber die Scrollfunktionalität ist doch standard?!)

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

02.10.2012, 19:41:51 via Website

Also das läuft bei mir.
1<ScrollView
2 android:id="@+id/scrollView1"
3 android:layout_width="match_parent"
4 android:layout_height="wrap_content"
5 android:layout_weight="0.91" >
6
7 <LinearLayout
8 android:id="@+id/ScrollViewFrame"
9 android:layout_width="match_parent"
10 android:layout_height="match_parent"
11 android:orientation="vertical"
12 tools:ignore="ScrollViewSize" >
13
14 <Button
15 android:id="@+id/DebugButton"
16 style="@style/Button_Default"
17 android:layout_width="0dip"
18 android:layout_height="wrap_content"
19 android:layout_weight="1"
20 android:onClick="OnDebug"
21 android:text="Debug" />
22 </LinearLayout>
23 </ScrollView>

Generel muß ich sagen das ist immer ne Fummelei mit den Scrollviews.
Ich würde den mit dem Designer anlegen und dann mal den Code anschauen.
Ich vermute der Fehler liegt nicht am Java Code, sonder am Layout.

Ich werden morgen sowie so noch eine Scrollview machen müssen und berichten.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

02.10.2012, 20:52:49 via Website

Was sagt denn der LogCat?

Das Layout sieht, abgesehen von Kleinigkeiten, OK aus, und die 2 Zeilen Source ebenfalls.

Das in dem Zustand "ab hier alles funktioniert", kommt mir allerdings verdächtig vor - es wird zwar nicht abstürzen, aber den gewünschten Text wirst du so nicht zu sehen bekommen...

Antworten
M. Neumann
  • Forum-Beiträge: 14

03.10.2012, 21:46:53 via Website

Naja ich wollte damit sagen, dass der übrige Code eigentlich funktioniert, wenn dieser Teil geht...

Mit Logcat konnte ich das Problem lösen:

1//Fehler: The specified child already has a parent. You must call removeView() on the child's parent first.
2
3text = (TextView) findViewById(R.id.textViewWithScroll);
4
5//Hier die Lösung:
6((ViewGroup)text.getParent()).removeView(text);

Jetzt gehts! Danke
War die erste Benutzung von Logcat...Wirklich zu gebrauchen, das Ding

— geändert am 03.10.2012, 22:16:33

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

04.10.2012, 01:25:54 via Website

Demnach lag das Problem irgendwo in deinem nicht geposteten Code, der offenbar vorsieht, das noch ein TextView in den ScrollView eingefügt wird;
d.h. du entfernst jetzt ein TextView, um später ein TextView wieder einzufügen?

Dann würde ich den Code nicht als Lösung, sondern als Workaround bezeichnen :P

Antworten
M. Neumann
  • Forum-Beiträge: 14

04.10.2012, 08:05:10 via Website

Wie sehe ich am besten bei welchem aufruf genau die exception geworfen wird?
Hab mir das halt jetzt mit e.getMessage() ins logcat schreiben lassen (alles in einen großen try-block)

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

04.10.2012, 09:25:30 via Website

Diese Frage macht nur dann Sinn, wenn du den LogCat noch nie angeschaut hast...
Im Falle eines Fehlers gibts da jede Menge rote Zeilen, jede davon mit Angabe von Datei/Zeilennummer.

Aber du wirst doch auch so wissen wo und warum dein Code einen TextView ins Layout einfügt?

Antworten
M. Neumann
  • Forum-Beiträge: 14

04.10.2012, 10:04:01 via Website

Nach der besagten stelle wird aber nur noch per .append text eingefügt...und das dann halt ausgegeben.
Rot ist bei mir nichts...ich hab mir die per kommandozeile in eine txt-datei schreiben lassen. Und da sehe ich keine datei bzw. Zeilennummer.

Antworten
M. Neumann
  • Forum-Beiträge: 14

04.10.2012, 12:53:10 via Website

Also ich habe es mal ganz einfach gemacht:

1text2 = (TextView) findViewById(R.id.TextView2);
2((ViewGroup)text.getParent()).removeView(text2); //sogar so geht es nicht ohne!
3text2.append("test");
4setContentView(text2);

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

04.10.2012, 18:36:20 via Website

Du weißt nicht wirklich was du da tust, oder?

Du setzt ein ContentView, dann löscht du ein TextView daraus und anschließend setzt du ein neues ContentView, das dann natürlich ohne ScrollView daher kommt, weil es ja nur aus einem TextView besteht?

Richtig wäre es etwa so:
setcontent(main);
text = findview();
...
String data = ...; // Hier den anzuzeigenden Text erstellen
...
text.setText(data);

Antworten