我有以下循环创建一个完全适合屏幕的字符串,它可以创建一个页面。
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;
}
答案 0 :(得分:1)
从它的外观来看,它不是你的arraylist而是你的循环。 Add向arraylist添加一个元素,get(index)从列表中获取index'th元素。没问题。
你的问题是它在循环之后向页面添加了完整的内容,此时full已经包含了所有内容。将pages.add放在循环中,它将被修复。确保每次迭代都重置完整。在循环开始时输入full =“”。应该工作。
答案 1 :(得分: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(...)