1

ねえ、私は以下のコードを使用して、ボタンを押して新しいテキストをテキストビューに取り込むために使用していますが、それは遅く、半分の時間は機能しませんが、残りの半分の時間は正常に機能します、誰かイデがありますか?

final Button button = (Button) findViewById(R.id.slumpaovrigt);
    button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
    Random myRandom5 = new Random();
    TextView textovrigt = (TextView) findViewById(R.id.textovrigt);
    switch(myRandom5.nextInt() %151) {
    case 0:
        textovrigt.setText("text 1");
        break;
    case 1:
        textovrigt.setText("text 2");
        break;
    case 2:
        textovrigt.setText("text 3");
        break;
    case 3:
        textovrigt.setText("text 4");
        break;
    }
    }
    });
    }
    }

また、同じコードで4つの異なるxmlビューを使用しますが、ボタンとテキストビューが異なり、テキストも異なります。それぞれに約150の異なるテキスト(ケース)が含まれています。

コードを少し変更して改善しましたが、それでも少し遅いです

これは、Javaファイルの完全なコードです

import java.util.Random;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Ovrigtskamt extends Activity {

    Button slumpaovrigt;
TextView textovrigt;
Random slumpaovrigt2 = new Random();


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ovrigttext);
    super.onCreate(savedInstanceState);
    this.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);



    slumpaovrigt = (Button) findViewById(R.id.slumpaovrigt);
    textovrigt = (TextView)findViewById(R.id.textovrigt);

    loadDoc();
}

private void loadDoc(){




    String s = "";

    for(int x=0;x<=100;x++){
        s += "Line: "+String.valueOf(x)+"\n";
    }

    textovrigt.setMovementMethod(new ScrollingMovementMethod());

    textovrigt.setText("Klicka på Slumpa");




    slumpaovrigt.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {




    switch(slumpaovrigt2.nextInt() %4) {
    case 0:
  case 0:
    textovrigt.setText("text 1");
    break;
case 1:
    textovrigt.setText("text 2");
    break;
case 2:
    textovrigt.setText("text 3");
    break;
case 3:
    textovrigt.setText("text 4");
    break;
}
}
});
}
}

しかし、言われたように、151の異なるテキスト

4

3 に答える 3

1

詳細を確認せずに、生成している数値がswitchステートメントで常にカバーされているとは限りません。コードを1行ずつステップ実行し、switchステートメントに到達したときに何が起こるかを確認することをお勧めします。

于 2012-05-06T19:40:56.753 に答える
0

更新:あなたは%151をやっていますが、コードにその数の要素がありますか?このコード例にはありません。代わりに%4を使用してください。Update2:またはrandom.nextInt(4)

直接見ることができる2つの最適化ですが、それが実際にそれだけの遅れを引き起こす場合は奇妙に聞こえます。

  1. 毎回ランダムオブジェクトを作成するのではなく、起動時に一度作成して再利用します。
  2. ビューを何度も見つけないでください。起動時にそれを実行し、ビューへの参照を保存してください。
于 2012-05-06T19:38:29.920 に答える
0

しかし、それは遅れており、私がそれを押す回数の半分は機能しません<

関数myRandom5.nextInt()%151は、-151から151までのすべての値を生成するため、半分の時間は機能しないのも不思議ではありません。

/Math.abs

于 2012-05-06T20:45:56.673 に答える