2013-03-15 39 views
1

当切换意图时,我失去了以前的onActivityResult数据我需要它保持它从用户获得的两个数字,目前它将保留一个数字,然后当下一个输入时丢失前一个,这里是代码:当转换意图时,我失去了数据

package com.eric.theworks; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity implements OnClickListener { 

Button width, height, calc; 
TextView area; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    width = (Button) findViewById(R.id.button1); 
    height = (Button) findViewById(R.id.button2); 
    calc = (Button) findViewById(R.id.button3); 
    area = (TextView) findViewById(R.id.textView1); 

    width.setOnClickListener(this); 
    height.setOnClickListener(this); 
    calc.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    Intent i = new Intent(this, Numbers.class); 
    switch (v.getId()) { 

    case R.id.button1: 
     // width 
     i.putExtra("numbers", "width"); 
     startActivityForResult(i, 1); 

     break; 

    case R.id.button2: 
     // height 
     i.putExtra("numbers", "height"); 
     startActivityForResult(i, 1); 

     break; 

    case R.id.button3: 
     // calc 

     break; 

    } 


    } 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if (data.getExtras().containsKey("widthInfo")){ 
     width.setText(data.getStringExtra("widthInfo")); 

} 
    if (data.getExtras().containsKey("heightInfo")){ 
     height.setText(data.getStringExtra("heightInfo")); 

} 

} 

} 





package com.eric.theworks; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class Numbers extends Activity implements OnClickListener { 
EditText number; 
Button sendInfo; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.numbers); 
    number = (EditText) findViewById(R.id.editText1); 
    sendInfo = (Button) findViewById(R.id.button1); 
    sendInfo.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    String s = number.getText().toString(); 
    Intent i = getIntent(); 
    String msg = i.getStringExtra("numbers"); 
    if (msg.contentEquals("width")) { 
     i.putExtra("widthInfo", s); 
     setResult(RESULT_OK, i); 
     finish(); 

    } 
    if (msg.contentEquals("height")) { 
     i.putExtra("heightInfo", s); 
     setResult(RESULT_OK, i); 
     finish(); 

    } 

    } 

} 

回答

1

可以使用静态变量来存储以前的数据。

声明全局静态字符串。

static String widthInfo=""; 
static String heightInfo=""; 

也给不同的请求码。

case R.id.button1: 
     // width 
     i.putExtra("numbers", "width"); 
     startActivityForResult(i, 1); 

     break; 

    case R.id.button2: 
     // height 
     i.putExtra("numbers", "height"); 
     startActivityForResult(i, 2); 

然后在您的onActivityResult中使用它。

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
     case (1): { 

     if (data.getExtras().containsKey("widthInfo")){ 
      widthInfo=data.getStringExtra("widthInfo") 
      width.setText(data.getStringExtra("widthInfo")); 

    } else { 
    height.setText(heightInfo); 
    width.setText(widthInfo); 
    } 
     } 
    break; 
     case (2): 
     { 
     if (data.getExtras().containsKey("heightInfo")){ 
      heightInfo=data.getStringExtra("heightInfo") 
      height.setText(data.getStringExtra("heightInfo")); 

    }else { 
    height.setText(heightInfo); 
    width.setText(widthInfo); 
    } 

    } 
    break; 
    } 
} 
+1

这种方法的工作,但由于某种原因,大干快上按钮2去掉文本,并使其空白(仍然可以使用),现在他们只是说“按钮”,但最终会改变。 – 2013-03-15 09:45:31

+0

你可以做一件事。将resultCode的宽度和高度分别设置为1和1,然后在activityResult中根据resultCode分开上面的代码。开关(ResultCode){案例1:{//宽度中断的代码;}案例2:{//代码的高度。打破;}} – KDeogharkar 2013-03-15 09:51:26

+0

试试看.. – KDeogharkar 2013-03-15 09:52:23

0

您可以使用捆绑来从一个活动传递到另一个数据,而不是直接的意图。例如:

Bundle b = new Bundle(); 
     b.putString("SingleClick",a); 
     b.putString("LongClick", "no"); 
     i.putExtras(b); 

,并获取数据在另一个活动中使用

Bundle bundle = getIntent().getExtras(); 
     String admin = bundle.getString("LongClick"); 
0
String s = number.getText().toString(); 
Intent i = getIntent(); 
String msg = i.getStringExtra("numbers"); 
if (msg.contentEquals("width")) { 
    i.putExtra("widthInfo", s); 
    setResult(RESULT_OK, i); 
    finish(); 

} 

确保串小号具有任何价值....

+0

你是什么意思?它从.Numbers中的编辑字段获取文本。它确实工作并返回字符串,但问题是当我更改heightInfo时,widthInfo只是回到说“按钮”,我需要保留两个字符串。 – 2013-03-15 09:48:40

相关问题