2013-04-25 80 views
1

我有下面的循環創建了一個完全符合屏幕的字符串,它創建了一個可以說話的頁面。ArrayList在do..while循環中沒有像預期的那樣工作

for (int i = 0; i < totalLine; i++) { 

     temp = enterLine(mTextView, textToBeShown, i); 
      full = full + temp; 

    } 

所以在迭代完成後full保存一頁。

我想要做的是創建一個外迭代,它允許我創建多個頁面,但未定義要創建的頁面數量。所以如果沒有更多的頁面被創建,迭代需要停止。

我試了下面的代碼,但由於某種原因,當調用頁面Pages.get(1)它給出了整個字符串,不僅僅是full/Page。例如,如果我已將三個字符串添加到ArrayList頁面,則ArrayList中將有三個字符串,但所有字符串都具有相同的值。

隨着一些測試與Log,我知道第一次迭代運作良好,而且full給出的預期值在第一do迭代意味着給出的預期值到full正因爲此,在第二次迭代等。

do{ 
    for (int i = 0; i < totalLine; i++) { 

     temp = enterLine(mTextView, textToBeShown, i); 
     if(temp.trim().length() == 0){ 
      break; 
     }else{ 
      full = full + temp; 
     } 
    } 
    Pages.add(full); 

所以,問題是我在做什麼毛病ArrayList爲什麼是不是工作,我很期待。

編輯

這是enterLine代碼:更多Log的使用並沒有覺得有必要顯示它們。

public String enterLine(TextView mTextView, String textBeShown, int i){ 

     String A; 
     int number = mTextView.getPaint().breakText(textToBeShown, 0, textToBeShown.length(),true,mTextView.getWidth(), null); 

     if(textToBeShown.substring(number-1,number) != " "){ 
      number = textToBeShown.substring(0,number).lastIndexOf(" "); 
      Log.e("TAG1", "Found " + i); 
     } 

     A = (textToBeShown.substring(0, number) + "\n"); 
     Log.e(TAG, textToBeShown.substring(0, number)); 
     textToBeShown = textToBeShown.substring(number, textToBeShown.length()); 
     return A; 
    } 
+1

職位'enterLine'的代碼,不知道是什麼做...... – 2013-04-25 14:56:31

+0

我會的,但'enterLine'正常工作,altough它可以連接到它。 – SitRock 2013-04-25 14:58:52

+0

你需要在某處重新初始化'full'到一個空值,不是嗎?你繼續填充它。在「做」和「爲了」之前重置它會是一個好主意嗎? – 2013-04-25 15:04:20

回答

1
do{ 
    full="" 
    for (int i = 0; i < totalLine; i++) { 
     temp = enterLine(mTextView, textToBeShown, i); 
     if(temp.trim().length() == 0){ 
      break; 
     }else{ 
      full = full + temp; 
     } 
    } 
    Pages.add(full); 
}while(...) 

或更好

do{ 
    StringBuilder builder = new StringBuilder(); 
    for (int i = 0; i < totalLine; i++) { 
     temp = enterLine(mTextView, textToBeShown, i)); 
     if(temp.trim().length() == 0){ 
      break; 
     }else{ 
      builder.append(temp); 
     } 
    } 
    Pages.add(builder.toString()); 
}while(...) 
1

從外觀來看,它不是你的數組列表,而是你的循環。 Add將一個元素添加到數組列表中,get(index)從列表中獲取index'th元素。那裏沒問題。

你的問題是它在循環後向頁面添加了完整的內容,滿點已經包含了所有內容。將pages.add放入循環中,它將被修復。確保您重置每個迭代完整。在循環開始處放滿=「」。那麼應該工作。

+0

對不起,這可能是我的錯,我沒有解釋得很好,但是當我從0到totalLine時,它創建了一個完整的頁面。比在'do..while'中創建頁面。在每個'for..loop'的迭代中,一條適合屏幕寬度的線正在創建。 – SitRock 2013-04-25 15:08:48

+0

啊。那麼你仍然希望在每個循環開始時重新初始化,因爲它只是將所有文本都收集到一個字符串中,併爲頁面添加更長的字符串。試試看,讓我知道它是如何發展的。 – NathanTempelman 2013-04-25 15:28:20

+0

是的,有人已經建議它,它的工作感謝您的幫助! – SitRock 2013-04-25 16:16:53

相關問題