1

インテントを切り替えると、以前の onActivityResult からデータが失われます。ユーザーから取得した両方の数値を保持する必要があります。現在、1 つの数値を保持し、次に入力すると前の数値を失います。コードは次のとおりです。

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();

    }

    }

}
4

3 に答える 3

1

静的変数を使用して、以前のデータを格納できます。

静的文字列をグローバルに宣言します。

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

また、別の Requestcode を指定します。

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;
    }
}
于 2013-03-15T07:14:15.997 に答える
0

Bundle を使用して、インテントを直接渡すのではなく、あるアクティビティから別のアクティビティにデータを渡すことができます。例えば:

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

別のアクティビティでデータを取得するには

Bundle bundle = getIntent().getExtras();
        String admin = bundle.getString("LongClick");
于 2013-03-15T07:13:14.980 に答える
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();

}

文字列sに値があることを確認してください....

于 2013-03-15T07:27:05.353 に答える