2014-01-05 17 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(); 

      } 
      });