2013-04-25 76 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

相关问题