1

画面に正確に収まる文字列を作成する次のループがあり、いわばページを作成します。

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

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

    }

したがって、反復が完了すると、 full1 ページが保持されます。

私がやりたいのは、複数のページを作成できる外側の反復を作成することです。作成するページの量は定義されていません。したがって、作成するページがそれ以上ない場合は、反復を停止する必要があります。

次のコードを試してみましたが、何らかの理由でページを呼び出すと、 / ページPages.get(1)だけでなく文字列全体が出力されます。fullたとえば、3 つの文字列がArrayList ページに追加された場合、3 つの文字列がページに追加されますArrayListが、すべて同じ値になります。

を使用したいくつかのテストではLog、最初の反復がうまく機能していることがわかります。これにより、最初の反復fullで期待値doが得られ、2 番目の反復でも期待値が得られ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 に答える