2014-01-05 18 views
3

我目前正在使用android的第一步。我正在开发一个非常简单的计算器,其中我有两个活动,一个主要活动和一个结果活动。在这个结果活动中,我有一个返回按钮,这是他主要的活动。问题是,当我回到主要活动时,我在文本字段上的值仍然存在。我该怎么做,以便当我从结果活动返回时,主要活动的字段被清除?Android - 重置不同活动的字段

下面是我的主要活动代码:

public class MainActivity extends Activity implements OnCheckedChangeListener{ 

private static final int REQUEST_CODE = 1; 
private EditText number1, number2; 
private Button btn1; 
private Intent intent; 
private String operation; 
private RadioGroup RadioGroupOperation; 

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

    //faz a ligação entre a aplicação e o layout 
    number1 = (EditText)findViewById(R.id.editText1); 
    number2 = (EditText)findViewById(R.id.editText2); 
    btn1 = (Button)findViewById(R.id.calcular); 
    intent = new Intent(this, ResultActivity.class); 

    btn1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //insere na intent os dois numeros digitados pelo utilizador 
      intent.putExtra("number1", number1.getText().toString()); 
      intent.putExtra("number2", number2.getText().toString()); 
      intent.putExtra("operation", operation); 
      startActivityForResult(intent, REQUEST_CODE); 
     } 
    }); 
    RadioGroupOperation = (RadioGroup)findViewById(R.id.radioGroup1); 
    RadioGroupOperation.setOnCheckedChangeListener(this); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 


@Override 
public void onCheckedChanged(RadioGroup group, int checkedId) { 
    switch(checkedId){ 
    case R.id.soma: 
     operation="+"; 
      break; 
    case R.id.subtracao: 
     operation="-"; 
      break; 
    case R.id.multiplicacao: 
     operation="*"; 
      break; 
    case R.id.divisao: 
     operation="/"; 
      break; 
    } 
    Toast.makeText(MainActivity.this, operation, Toast.LENGTH_SHORT).show(); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if(resultCode == RESULT_OK && requestCode == REQUEST_CODE){ 
     if(data.hasExtra("result")){ 
      Toast.makeText(this, "O resultado da operação anterior foi:" + data.getExtras().getString("result") , Toast.LENGTH_LONG).show();     
     } 
     //testing 
     /*if(data.hasExtra("number1") && data.hasExtra("number2")){ 
      number1.setText(0); 
      number2.setText(0); 
     }*/ 
     //end testing 

    } 

} 

} 

我的第二个活动(结果):

public class ResultActivity extends Activity { 

private TextView textView1; 
private Intent intent; 
private String number1, number2, operation; 
private double result; 
private Button btn1; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_result); 

    btn1 = (Button)findViewById(R.id.voltar); 
    intent = getIntent(); 

    //armazena os numeros digitados 
    number1 = intent.getStringExtra("number1"); 
    number2 = intent.getStringExtra("number2"); 
    operation = intent.getStringExtra("operation"); 

    //Efectua calculos 
    try { 
     if(operation.equals("+")) 
      result = (Double.parseDouble(number1) + Double.parseDouble(number2)); 
     else if(operation.equals("-")) 
      result = (Double.parseDouble(number1) - Double.parseDouble(number2)); 
     else if(operation.equals("*")) 
      result = (Double.parseDouble(number1) * Double.parseDouble(number2)); 
     else if(operation.equals("/")) 
      result = (Double.parseDouble(number1)/Double.parseDouble(number2)); 

     textView1 = (TextView)findViewById(R.id.textView1); 
     textView1.setText("O resultado é " + String.valueOf(result)); 

     btn1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       finish(); 

      } 
      }); 

     } 
     catch(Exception e){ 
      Toast.makeText(this, "Ocorreu um erro!", Toast.LENGTH_SHORT).show(); 
      this.finish(); 
     }  
} 

@Override 
public void finish(){ 
Intent data = new Intent(); 
data.putExtra("result", String.valueOf(result)); 
//testing 
//data.putExtra("number1", 0); 
//data.putExtra("number2", 0); 
//end testing 
setResult(RESULT_OK, data); 
super.finish(); 
} 

} 

我已经尝试过这样做,如果你看到//测试之间的块并且//结束测试,但结果是当我尝试返回到第一个活动时,我崩溃了该应用程序。

有关我如何做到这一点的任何想法?

由于提前, CT

回答

1

一切都是正确的,除了设置文本为0 EditText.setText工作只接受字符串值。

更改您的测试代码

if(data.hasExtra("number1") && data.hasExtra("number2")){ 
      number1.setText("0"); 
      number2.setText("0"); 
     } 

仅更改需要的是的setText(“0”)

1

在你的第一个活动onActivityResult函数内部,你应该重置两个EDITTEXT

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if(resultCode == RESULT_OK && requestCode == REQUEST_CODE){ 
     if(data.hasExtra("result")){ 
      Toast.makeText(this, "O resultado da operação anterior foi:" + data.getExtras().getString("result") , Toast.LENGTH_LONG).show();  
      number1 = (EditText)findViewById(R.id.editText1); 
      number2 = (EditText)findViewById(R.id.editText2);   
      number1.setText(0); 
      number2.setText(0); 
     } 
     //testing 
     /*if(data.hasExtra("number1") && data.hasExtra("number2")){ 
      number1.setText(0); 
      number2.setText(0); 
     }*/ 
     //end testing 

    } 

} 

你的测试代码不工作,因为这两个EditText变量不会被初始化。当你回来的时候,你在onCreate里做的初始化失败了。

+0

谢谢您的回答,我会尽快,我可以测试它。 –

+0

这个陈述是不正确的 - “当你回来的时候,你在onCreate中做的初始化失败了。” – San

1

嗨,你还可以添加意图加载您的第一项活动是在我的记事本应用:)

btn1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent myIntent = new Intent(getApplicationContext(),MainActiviy.class); 
        startActivity(myIntent); 

          finish(); 

      } 
      });