从一个活动中获取文本并将其设置为另一个活动

时间:2012-08-10 23:26:23

标签: android

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

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

问题在于有许多不同大小的烟草袋,因此,为了解决所有问题,它必须以6盎司袋装为基础。所以我开发的是一个工作表,以确定你将支付多少适当的金额。例如,如果我购买一个16盎司的包,那么计算结果就不对了,所以工作表会告诉你为同一产品的6盎司包装支付多少钱。

所以我无法弄清楚如何从我的工作表中获取新价格并将其放入计算器活动中。从我读到的,getText和setText在活动之间不起作用。我还看到了一个intent方法,在这个方法中,你将来自当前活动的extras和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();

感谢大家的回应,没有你们,我仍然会把头发拉出来。 另外,如果有人建议关闭按下后退按钮而没有最后一行代码的话,我会全力以赴。否则很酷,因为它实际上按照我想要的方式工作。


感谢, 特拉维斯

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:1)

不确定我的问题是否正确,但是从活动中传回数据类似于将数据传递给活动。您可能会使用startActivityForResult启动工作表,然后在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 );
            ...
        }
        ...
    }
}

您的工作表活动会将其数据包装到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();
    }
}