0

所以目前我正在制作一个教育应用程序,用户可以通过按下按钮查看如何解决给定问题。虽然我的代码最初运行良好,但当我点击后退按钮并单击查看解决方案按钮时,我的默认布局会弹出,我无法编辑最后四个 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 设置为静态而不是最终的,但我仍然没有完全完成我的错误。有人愿意告诉我为什么它会产生如此大的不同吗?

4

1 回答 1

0

一个静态变量/方法对于整个类只有一个实例。这意味着,对于您的列表视图,整个应用程序中的所有活动实例都只存在一个,这就是您收到错误的原因。Final 意味着除了构造函数或定义变量时,它不能在任何地方初始化。(静态和最终的区别?)。

于 2013-06-15T05:16:04.473 回答