1

我有以下循环,它创建了一个完全适合屏幕的字符串,可以说它创建了一个页面。

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

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

    }

所以在迭代完成后full保留一页。

我想要做的是创建一个外部迭代,它允许我创建多个页面,要创建的页面数量没有定义。因此,如果没有更多页面要创建,则需要停止迭代。

我尝试了以下代码,但由于某种原因,在调用页面时Pages.get(1)它会给出整个字符串,而不仅仅是full/ 页面。例如,如果 i 三个字符串已添加到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代码: MoreLog的使用感觉不需要全部显示。

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;
    }
4

2 回答 2

1

从它的外观来看,它不是您的数组列表,而是您的循环。Add 将一个元素添加到 arraylist,get(index) 从列表中获取第 index 个元素。那里没问题。

您的问题是它在循环之后将完整添加到页面,此时完整已经包含所有内容。将 pages.add 放入循环中,它将被修复。确保每次迭代都完全重置。将 full = "" 放在循环的开头。那时应该工作。

于 2013-04-25T15:04:22.123 回答
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(...)
于 2013-04-25T15:19:32.333 回答