1

我看到了很多与我的问题非常相似的问题,但似乎没有任何效果,所以如果之前已经回答过,我深表歉意。

所以我有一个带有计算器的应用程序,它显示你自己卷烟可以节省多少钱。在计算器中,我有一系列用于输入的编辑文本框:您当前为一包香烟支付的金额、您所在州的税款、每天吸烟量、一袋烟草的成本和烟管的成本。点击计算后,它会告诉您当前为预制卷烟支付的费用与自己卷烟的费用。

存在的问题是有许多不同尺寸的烟草袋,所以要解决所有问题,它必须基于 6 盎司袋子。所以我开发的是一个工作表,用来计算你会为正确的金额支付多少。例如,如果我买一个 16 盎司的袋子,计算结果就不会正确,所以工作表会告诉你要为一袋 6 盎司的相同产品支付多少钱。

所以我不知道如何从我的工作表中获取新价格并将其放入计算器活动中。从我读到的 getText 和 setText 在活动之间不起作用。我还看到了 Intent 方法,您在其中 putExtras 从当前活动和 getExtras 在您希望它去的活动上。但我见过的每个例子都涉及开始一项新活动。当我只想获取并基本上复制工作表中的数字时,关闭工作表并将其放入我的计算器活动中。

我非常感谢您能给我的任何信息,因为我几个月来一直在寻找这个答案。好吧,我放弃了一段时间,现在我又回来了。如果您需要我发布代码或任何其他信息,请告诉我。

这是我的计算器。这是我想将新数字放入 editText(perbag) 的地方

public class Calculator extends Activity {
     EditText perbag

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.calculator);



    final MediaPlayer lighterFlick = MediaPlayer.create(this,
            R.raw.lighter_sound);

    // worksheet clickable textview
    TextView initiateWorksheet = (TextView)           findViewById(R.id.initiateWorksheet);
    initiateWorksheet.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub

            startActivity(new Intent("com.trhodes.saveonsmokes.WORKSHEET"));

        }
    });

这是从计算器活动中打开的工作表活动。因此,第一部分只是在“wsnewprice”中获取我需要的数字。所以在底部我有按钮“wsok”,这是我想要获取工作表的“wsnewprice”的地方,然后关闭工作表并将其放在上述计算器活动的editText“perbag”中。

    public class Worksheet extends Activity{



EditText wspriceperbag = null;
EditText wsweight = null;
EditText wsnewprice = null;
Button wscalculate;
Button wsok;
double Wspriceperbag = 0.00D;
double Wsweight = 0.00D;
double Wsnewprice = 0.00D;
double ounce = 6;
public Intent intent;







@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.worksheet);

    wspriceperbag = (EditText) findViewById(R.id.wspriceperbag);
    wsweight = (EditText) findViewById(R.id.wsweight);
    wsnewprice = (EditText) findViewById(R.id.wsnewprice);
    wscalculate = (Button) findViewById(R.id.wscalculate);
    wsok = (Button) findViewById(R.id.wsok);







    wscalculate.setOnClickListener(new Button.OnClickListener(){

        public void onClick(View v) {
            // TODO Auto-generated method stub
            try {

                Wspriceperbag = Double.parseDouble(wspriceperbag.getText()
                        .toString());
                Wsweight = Double.parseDouble(wsweight.getText()
                        .toString());
            } catch (NumberFormatException nfe) {

            }
            DecimalFormat localDecimalFormat = new DecimalFormat("#0.00");
            Wsnewprice = (Wspriceperbag / Wsweight) * ounce;
            wsnewprice.setText(localDecimalFormat.format(Wsnewprice));



        }

    });








    wsok.setOnClickListener(new Button.OnClickListener(){

        public void onClick(View v) {
            // TODO Auto-generated method stub






        }

    });

现在这是我尝试使用的代码,但就像我说的我不想开始一项新活动,我只想去上一个活动。

to:

    perbag.setText(getIntent().getExtras().getString("newprice"));


from:

    Intent intent = new Intent(Worksheet.this, Calculator.class);
            intent.putExtra("newprice",wsnewprice.getText().toString());
            startActivity(intent);

如果这令人困惑,我很抱歉,我试图尽可能清楚。

编辑:对于我找到的解决方案

原始活动的新代码

 //this is to start the worksheet
        initiateWorksheet.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
Intent i = new Intent(Calculator.this, Worksheet.class);
startActivityForResult(i, 0);


//this is coming back to the original activity and placing the new data..
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK);
        Bundle bundle = data.getExtras();
        String s = bundle.getString("newprice");
        perbag.setText(s);

工作表活动的新代码:

//this is getting the new number and putting it into a string
wsok.setOnClickListener(new Button.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent newNumber = new Intent();
            Bundle bundle = new Bundle();
            bundle.putString("newprice", wsnewprice.getText().toString());
            newNumber.putExtras(bundle);
            setResult(RESULT_OK, newNumber);
            finish();


//had to add this because force close when hitting the back button
    @Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    Intent newNumber = new Intent();
    Bundle bundle = new Bundle();
    bundle.putString("newprice", "");
    newNumber.putExtras(bundle);
    setResult(RESULT_OK, newNumber);
    finish();

感谢您回复的每个人,如果没有你们,我仍然会拔头发。另外,如果有人对在没有最后一行代码的情况下按下后退按钮的强制关闭有任何建议,我会全力以赴。否则很酷,因为它实际上以我想要的方式工作。


谢谢,特拉维斯

4

2 回答 2

3

你问如何在活动之间传递数据?要开始一项新活动,您可能会创建一个Intent并开始它,

Intent i = new Intent(this, OtherActivity.class);
startActivity(i);

如果您想将数据传递给其他活动,只需将其添加到意图中,

Intent i = new Intent(this, OtherActivity.class);
i.putExtra("foo", "bar");
startActivity(i);

在接收活动中,

Intent i = getIntent(); // get the intent that started me
String foo = i.getStringExtra("foo");
于 2012-08-10T23:42:53.503 回答
1

不确定我的问题是否正确,但是活动传回数据类似于将数据传递活动。您可能会开始您的工作表,startActivityForResult然后在返回 in 后查看返回的结果数据onActivityResult,该数据也包含在中Intent

这是一个强调的例子。

public class CalculatorActivity extends Activity {
    /** Some locally unique identifier to recognize where you're coming from. */
    private static final int RECQ_WORKSHEET = 1;

    /**
     * Some event that triggers your worksheet activity.
     */
    public void onWorksheetButtonTouched( final View view ) {
        Intent intent = new Intent( this, WorksheetActivity.class );
        startActivityForResult( intent );
    }

    /**
     * Method which is called when returning from an activity
     * called with startActivityForResult.
     */
    @Override
    public void onActivityResult( int requestCode, int result, Intent data ) {
        if( requestCode == REQC_WORKSHEET ) {
            // We're coming back from the worksheet here, so fetch the returned data.
            final String numberFromWorksheet = data.getStringExtra( WorksheetActivity.EXTRA_NUMBER );
            ...
        }
        ...
    }
}

您的工作表活动将返回其包装到 an 中的数据并将其Intent存储在setResult.

public class WorksheetActivity extends Activity {
    /**
     * Having accessible extra parameters enumerated in some way
     * makes your life (and the life of your colleagues) easier.
     * I've seen people adding _IN_, _OUT_ or _IO_ to emphasize
     * whether it's an input or output parameter, or both.
     */
    public static final String EXTRA_NUMBER = "number";

    ...

    /**
     * Some event which closes the worksheet activity.
     */
    public void returnFromWorksheetButtonTouched( final View view ) {
        // Fetch the text you want to return.
        final EditText someText = (EditText) findViewById( R.id.someIdOfYourEditText );
        final String value = someText.getText();
        // Put it into an Intent.
        final Intent resultData = new Intent(); // note that we're using the no-args c'tor here
        resultData.putExtra( EXTRA_NUMBER, value );
        // Now finish with this result.
        setResult( RESULT_OK, resultData );
        finish();
    }
}    
于 2012-08-10T23:59:46.517 回答