2013-02-20 14 views
20
android

ben sadece bir acemi yüzden muhtemelen bir aptal soruSadece bir görünüm hiyerarşisi oluşturan orijinal konu görünümlerine dokunabilir.


ben görüşlerini dokunabilirsiniz görünüm hiyerarşisi yarattı Sadece orijinal iplik anlamını anlamıyorum sorduğum için beni affet lütfen.

Lütfen birisi bana bu hatanın neden oluştuğunu ve bu sorunun nasıl çözüleceğini öğretebilir.

ThankYou

Bu benim sınıf

public class MainActivity extends Activity { 
    TextView title; 
    Random random = new Random(); 
    int  counter = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.startup); 
     startingUp(); 
    } 

    private void startingUp() { 
     Thread timer = new Thread() { //new thread   
      public void run() { 
       Boolean b = true; 
       try { 
        do { 
         counter++; 
         title(); 
         sleep(1000); 
         title.clearComposingText(); 

        } 
        while (b == true); 
       } catch (IntruptedException e) { 
        e.printStackTrace(); 
       } 
       finally { 
       } 
      }; 
     }; 
     timer.start(); 
    } 

    public void title() { 
     title = (TextView) findViewById(R.id.tvTitle); 
     switch (random.nextInt(2)) { 
      case 0: 
       title.setGravity(Gravity.RIGHT); 
       break; 
      case 1: 
       title.setGravity(Gravity.CENTER); 
       break; 
      case 2: 
       title.setGravity(Gravity.LEFT); 
       break; 
     } 
     title.setTextColor(Color.rgb(random.nextInt(250), random.nextInt(250), random.nextInt(250))); 
     title.setTextSize(random.nextInt(55) + 10); 
    } 
} 

Ve bu sadece görüşlerini değiştirebilir çünkü İçten dişli title.clearComposingText(); ile metin değiştiremezsiniz benim LogCat

02-20 10:53:19.293: I/Adreno200-EGLSUB(5816): <ConfigWindowMatch:2078>: Format RGBA_8888. 
02-20 10:53:19.303: D/memalloc(5816): /dev/pmem: Mapped buffer base:0x5c914000 size:14135296 offset:10366976 fd:64 
02-20 10:53:19.303: E/(5816): Can't open file for reading 
02-20 10:53:19.303: E/(5816): Can't open file for reading 
02-20 10:53:19.303: D/OpenGLRenderer(5816): Enabling debug mode 0 
02-20 10:53:19.373: D/memalloc(5816): /dev/pmem: Mapped buffer base:0x5db58000 size:3768320 offset:0 fd:67 
02-20 10:53:20.143: W/dalvikvm(5816): threadid=11: thread exiting with uncaught exception (group=0x40abc210) 
02-20 10:53:20.143: E/AndroidRuntime(5816): FATAL EXCEPTION: Thread-3102 
02-20 10:53:20.143: E/AndroidRuntime(5816): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
02-20 10:53:20.143: E/AndroidRuntime(5816):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039) 
02-20 10:53:20.143: E/AndroidRuntime(5816):  at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:722) 
02-20 10:53:20.143: E/AndroidRuntime(5816):  at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:771) 
02-20 10:53:20.143: E/AndroidRuntime(5816):  at android.view.ViewGroup.invalidateChild(ViewGroup.java:4112) 
02-20 10:53:20.143: E/AndroidRuntime(5816):  at android.view.View.invalidate(View.java:8639) 
02-20 10:53:20.143: E/AndroidRuntime(5816):  at android.view.View.invalidate(View.java:8590) 
02-20 10:53:20.143: E/AndroidRuntime(5816):  at android.widget.TextView.setGravity(TextView.java:2538) 
02-20 10:53:20.143: E/AndroidRuntime(5816):  at com.example.saikoro.MainActivity.title(MainActivity.java:58) 
02-20 10:53:20.143: E/AndroidRuntime(5816):  at com.example.saikoro.MainActivity$1.run(MainActivity.java:36) 
+4

Burada UI iş parçacığı kavramını öğrenmesi gerektiğini düşünüyorum. http://developer.android.com/guide/components/processes-and-threads.html – Rajnikant

+0

Teşekkür ederim ama bu sorunu çözmek için ne yapmam gerekiyor biliyor musunuz? –

+1

Üzgünüm Dün sadece stackoverflow kullanmaya başladım, bu yüzden ne olduğunu bilmiyorum –

cevap

27

Değiştir bakın this.Can için asynctask kullanabilirsiniz UI thread.You dışındaki iplikten TextView'un güncellememelisiniz.

private void startingUp() { 
    Thread timer = new Thread() { //new thread   
     public void run() { 
      Boolean b = true; 
      try { 
       do { 
        counter++; 
        title(); 
        sleep(1000); 

        runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         // TODO Auto-generated method stub 

         title.clearComposingText(); 
        } 
       }); 


       } 
       while (b == true); 
      } catch (IntruptedException e) { 
       e.printStackTrace(); 
      } 
      finally { 
      } 
     }; 
    }; 
    timer.start(); 
} 

Sen dışı UI iş parçacığı gelen görüşlerini değiştiremez.

2

olduğunu kullanıcı arabiriminden. Bunun yerine bir işleyiciyi kullanın ve metni değiştirmesine izin verin.

11

Bu istisna nedeniyle title.clearComposingText gelmiyor() kullanabilir. bile bu satır yararlı değil, bu satırı kaldırabiliriz. Bu istisna, bir UI-Thread görünümü değiştirmeye çalıştığı için title() işlevine giriyor. Bu yüzden bu işlevi bir UI İş Parçacığı veya İşleyicide çağırmamız gerekiyor.

private void startingUp() { 
     Thread timer = new Thread() { //new thread   
      public void run() { 
       boolean b = true; 
       try { 
        do { 
         counter++; 

         sleep(1000); 
         runOnUiThread(new Runnable() { 

          @Override 
          public void run() { 
            title(); 
           //title.clearComposingText();//not useful 

          } 
         }); 


        } 
        while (b == true); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       finally { 
       } 
      }; 
     }; 
     timer.start(); 
    } 
İlgili konular