0

そのため、現在、ユーザーがボタンを押すことで特定の問題を解決する方法を表示できる教育用アプリケーションを作成しています。私のコードは最初は正常に動作しますが、[戻る] ボタンを押して [ソリューションの表示] ボタンをクリックすると、既定のレイアウトが表示され、最後の 4 つの TextView を編集できません。これが私のコードです:

public class AdditionTensSolutionActivity extends Activity {
public static ArrayList<TextView> explain = new ArrayList<TextView>(3);
public static Button nextstep;
public static int onesnum1 = TensAdditionExerciseActivity.n1display % 10;
public static int onesnum2 = TensAdditionExerciseActivity.n2display % 10;
public static int onesanswer = onesnum1 + onesnum2;
public static int onesanswermod = onesanswer % 10;
public static int tensnum1 = TensAdditionExerciseActivity.n1display / 10;
public static int tensnum2 = TensAdditionExerciseActivity.n2display / 10;
public static int tensanswer = tensnum1 + tensnum2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.showsolutionlayout);

    TextView numrow1 = (TextView) findViewById(R.id.solproblemrow1);
    TextView numrow2 = (TextView) findViewById(R.id.solproblemrow2);
    TextView solution = (TextView) findViewById(R.id.solutiontextview);
    TextView carryover = (TextView) findViewById(R.id.carryovernumbers);

    TextView exp1 = (TextView) findViewById(R.id.explain1);
    TextView exp2 = (TextView) findViewById(R.id.explain2);
    TextView exp3 = (TextView) findViewById(R.id.explain3);
    TextView exp4 = (TextView) findViewById(R.id.explain4);

    numrow1.setText(TensAdditionExerciseActivity.n1display + "");
    numrow2.setText("   " + TensAdditionExerciseActivity.n2display + " +");

    explain.add(exp1);
    explain.add(exp2);
    explain.add(exp3);
    explain.add(exp4);

    nextstep = (Button) findViewById(R.id.nextstep);

    for (int i = 0; i < 4; i++) {
        explain.get(i).setVisibility(View.GONE);
    }

    solution.setVisibility(View.GONE);
    carryover.setVisibility(View.GONE);
    explain.get(0).setText("test");
    setTextViews();
    nextButtonsetOnClickListener();

}

protected void nextButtonsetOnClickListener() {
    nextstep.setOnClickListener(new View.OnClickListener() {
        int i = 0;

        public void onClick(View v) {
            explain.get(i).setVisibility(View.VISIBLE);
            i++;

            if (i > 2 && onesanswer < 10) {
                nextstep.setClickable(false);

            }

            if (i > 3 && onesanswer >= 10) {
                nextstep.setClickable(false);

            }
        }
    });

}

protected void setTextViews() {

    explain.get(0).setText(
            "Add " + (onesnum1) + " and " + (onesnum2) + " which equals "
                    + (onesanswer) + ".");

    if (onesanswer >= 10) {

        explain.get(1).setText(
                "Since the answer is 10 or greater, 1 must carry over to the tens place and "
                        + onesanswermod + " is left in the ones place.");
        explain.get(2).setText(
                "Add the tens place digits, " + tensnum1 + " and "
                        + tensnum2
                        + ". Don't forget to add the carried over 1!");
        explain.get(3).setText(
                "1 + " + tensnum1 + " + " + tensnum2 + " = "
                        + (tensanswer + 1));

    } else {
        explain.get(1).setText(
                "Add the tens place digits: " + tensnum1 + " and "
                        + tensnum2 + ".");

        explain.get(2).setText(
                tensnum1 + " + " + tensnum2 + " = " + tensanswer);
    }

ああ、私はそれを理解しました。ArrayList を final ではなく static に設定しましたが、まだエラー全体を完全には解決していません。なぜそんなに大きな違いが生じたのか、誰かが喜んで教えてくれますか?

4

1 に答える 1

0

静的変数/メソッドには、クラス全体に対してインスタンスが 1 つしかありません。つまり、リストビューの場合、アプリ全体のアクティビティのすべてのインスタンスに対して 1 つしか存在しないため、エラーが発生します。Final は、コンストラクター以外の場所、または変数が定義されているときに初期化できないことを意味します。(静的と最終の違いは? )。

于 2013-06-15T05:16:04.473 に答える