2013-02-09 9 views
5

Zmierzyłem się z tym dziwnym problemem, który spowodował wiele bólu głowy i kłopotów.Android TextView nie aktualizuje tekstu, gdy textIsSelectable jest ustawione na true

Opublikowałem aplikację, która jest repozytorium kilku książek, zdecydowałem się użyć TextView, aby wyświetlić tekst każdego rozdziału, ponieważ spełnia on wymagania i jest szybki i łatwy w użyciu.

Użytkownik poprosił o możliwość wyboru tekstu i skopiowania go, użyłem textIsSelectable = true i wszystko było w porządku, następnego dnia zadzwonił do mnie z informacją, że tekst się nie zmienia, otwierasz rozdział i przechodzisz na inny rozdział, ale tekst pozostaje ten sam.

Pomyślałem, że to może być jakiś logiczny problem z mojej strony, ale po pewnym debugowaniu problem był w TextView, kiedy ustawiłem textIsSelectable = false; Wszystko było w porządku.

Dla pewności użyłem statycznego int, który jest zwiększany za każdym razem, gdy tekst jest wyświetlany, tekst pozostał niezmieniony.

Na czym polega problem? czy używam TextView w niewłaściwy sposób? lub jest to jakiś błąd w samym TextView?

Oto mój układ (txtBody jest TextView że przyczyną problemu)

 <?xml version="1.0" encoding="utf-8"?> 

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@android:color/white"> 

    <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/scrollView" 
      android:fillViewport="true" 
      > 

     <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 

       android:orientation="vertical" 
       android:gravity="right"> 

      <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="Title Text" 
        android:id="@+id/txtTitle" 
        android:textSize="24sp" 
        android:padding="5dp" 
        android:gravity="right"/> 

      <TextView 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Detail Text" 
        android:id="@+id/txtBody" 
        android:background="@android:color/white" 
        android:gravity="right" 
        android:textColor="@android:color/black" 
        android:textSize="16sp" 
        android:padding="5dp" 
        android:enabled="true" 
        android:textIsSelectable="true" 
        android:selectAllOnFocus="false" 
        android:soundEffectsEnabled="true"/> 

     </LinearLayout> 


    </ScrollView> 


</FrameLayout> 

używam tego kodu, aby ustawić tekst:

String body = MainDataManager.getInstance().getChapterBody(book.getTable(), chapter.getId()); 
    updateTextStyle(); 
    txtTitle.setText(chapter.getTitle()); 
    txtBody.setText(body, TextView.BufferType.SPANNABLE); 
+0

Po 2 ~ 3 godzinach eksperymentowania, stwierdziłem, że to była przyczyna. Nienawidzę, gdy mój czas się marnuje ... Dla mojej wyszukiwarki Google ta strona była pierwszym trafieniem, a drugim hitem było [https://code.google.com/p/android/issues/detail?id=78491 ] Opis dokładnie pasuje do mojej sprawy. Zostało oznaczone jako BUG w 2014 roku z średnim priorytetem i nie zostało to naprawione w 2016 roku. Nie po raz pierwszy zmarnowałem swój czas w ten sposób ... przez błąd, który nie został naprawiony od kilku lat. –

Odpowiedz

0

Uase unieważnienia() metoda przed zmianą tekstu widok tekstu.

String body = MainDataManager.getInstance().getChapterBody(book.getTable(), chapter.getId()); 
    updateTextStyle(); 
    txtTitle.invalidate(); 
    txtTitle.setText(chapter.getTitle()); 
    txtBody.invalidate(); 
    txtBody.setText(body, TextView.BufferType.SPANNABLE); 
+0

Jednak musiałem wykonać unieważnienie w metodach OnStart() lub OnResume(). – Kumait

+0

Niestety ta sugestia nie działa dla mnie. – meisteg

+0

Myliłem się, to też nie działało dla mnie – Kumait

Powiązane problemy