1

私と非常によく似た質問をたくさん見ましたが、何も機能していないようです。以前に回答があった場合は申し訳ありません。

私が持っているのは、自分で煙草を巻いたときにどれだけのお金を節約できるかを示す電卓付きのアプリです。電卓には、入力用の一連の編集テキスト ボックスがあります。現在、タバコ 1 パックに支払っている金額、州の税金、1 日あたりの喫煙本数、タバコ 1 袋のコスト、チューブのコスト。計算を押すと、既製のタバコと自分で巻くタバコに現在いくら払っているかがわかります。

嘘の問題は、たばこのさまざまなサイズの袋がたくさんあることです。そこで私が開発したのは、適切な金額に対していくら支払うかを計算するためのワークシートです。たとえば、16 オンスのバッグを購入した場合、計算が正しく行われないため、同じ製品の 6 オンスのバッグにいくら支払うかがワークシートに表示されます。

そのため、ワークシートからその新しい価格を取得して電卓アクティビティに配置する方法がわかりません。私が読んだことから、 getText と setText はアクティビティ間では機能しません。また、現在のアクティビティから 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」で必要な数を取得することです。そのため、一番下には、ワークシートの「wsnewprice」を取得するボタン「wsok」があり、ワークシートを閉じて、上記の電卓アクティビティの 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し、 に戻った後に返された結果データを調べます。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();
    }
}    
于 2012-08-10T23:59:46.517 に答える