2013-07-03 64 views
-2

我用這個空白追加TextViews在日誌般的過程,它向用戶顯示:addView只有空虛結束後顯示

static void addlog(Activity innercont, String txt) 
    { 
     TextView tadd = new TextView(innercont); 
     tadd.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
     tadd.setText(txt); 
     Log.i(TAG,"addlog: "+txt); 
     layout.setOrientation(LinearLayout.VERTICAL); 
     layout.addView(tadd); 

     ScrollView scro = (ScrollView) innercont.findViewById(R.id.ScrollView1); 
     scro.removeAllViews(); 
     scro.addView(layout); 

     innercont.setContentView(scro); 
    } 

我知道大部分的東西都是沒用的,但是這是我的嘗試此刻。

問題

在第一(MainActivity-的onCreate)我加利用這個空間的初始化入口 - 它的工作原理。 然後,我有一個函數(私人類navigata擴展WebViewClient)調用另一個函數(自定義無效),有很多使用此功能的條目。 只有在函數完成(並且需要很長時間)之前,它們都不會顯示出來,什麼使得整個日誌無用(沒有人需要日誌,只有在完成所有事情後才能看到)。

所以我的問題是:我該怎麼做......就像暫停功能,以便textviews可以添加?

+1

使用單獨的'Thread'爲工作或看'AsyncTask'這是專爲長時間運行的操作 –

+0

爲什麼downvote?請提供一個理由,以便我可以改進帖子! @Butscher:我會表示感謝。 –

回答

0

感謝Michael Butscher,我使用線程解決了這個問題。

因此,我修改了原來addlog功能是這樣的:

static void addlog(Activity innercont, String txt) 
    { 
     if (innercont.findViewById(255) != null) 
     { 
      TextView tadd = (TextView) innercont.findViewById(255); 
      String atmtxt = (String) tadd.getText(); 
      atmtxt = atmtxt+"\n"+txt; 
      tadd.setText(atmtxt); 
      return; 
     } 

     TextView tadd = new TextView(innercont); 
     tadd.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
     tadd.setText(txt); 
     tadd.setId(255); 

     layout.setOrientation(LinearLayout.VERTICAL); 
     layout.addView(tadd); 

     ScrollView scro = (ScrollView) innercont.findViewById(R.id.ScrollView1); 
     scro.removeAllViews(); 
     scro.addView(layout); 

     innercont.setContentView(scro); 
    } 

與此前的主要工作與自己的addlog功能,它採用View.post沒有阻止它訪問UI線程做。

final TextView tadd = (TextView) cont.findViewById(255); 
     tadd.setText(""); 
     //Log.i(TAG, "get lists"); 

     new Thread(new Runnable() { 
      public void addlog2(final Activity cont, final String txt) 
      { 
       tadd.post(new Runnable() { 
        public void run() { 
         String atmtxt = (String) tadd.getText(); 
         atmtxt = atmtxt+"\n"+txt; 
         tadd.setText(atmtxt); 
        } 
       }); 
      } 


      public void run() { 
       addlog2(cont,"log text"); 
           //... 
       } 
     }).start();