2

これは私の質問の続きです:

アプリケーションの以前のアクティビティから何かを取得する際に問題があります。私の場合は、ListOfMeals と呼ばれる前のアクティビティで、リストビュー (朝食、朝のおやつなど) があります。朝食をクリックして食事を追加すると、パン、果物、野菜などの食品のリストをクリックします。など。その後、データベースに追加する必要があります。しかし、私がこれまでに持っているのはこれです。以下を参照してください。

case R.id.btFoodVegetableSave:
        String mealname = selected;

        String serving = calories.getText().toString();
        int i = Integer.parseInt(serving.replaceAll("[\\D]", ""));

        String servng = String.valueOf(i);

        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
        String strDate = sdf.format(new Date());

        if ( ( mealname.isEmpty() || servng.isEmpty() ) ){

            // call for custom toast
            viewErrorToast();
        }

        else {

        boolean didItWork = true;

        try{

            BreakFastLog entry = new BreakFastLog(Baguettes_Bagels.this);
            entry.open();   
            entry.createEntry(mealname, servng, strDate);
            entry.close();

            }
            catch(Exception e){
                didItWork = false;
                viewErrorToast();
            }finally{
                if (didItWork){
                    viewBMRSavedToast();
                }

            }
        } // end of if else statement
        break;

私のアプリの構造は次のようなものです:

アクティビティ A - 食事のリスト (リストビュー = 朝食、モーニング スナックなど)
アクティビティ B - アクティビティ A (モーニング スナックなど) から選択され、さらに食べ物を追加するためのボタンがあります
アクティビティ C - 食事カテゴリのリスト (リストビューもパン) 、パスタなど)
アクティビティ D - アクティビティ C から選択 (再びリストビュー: ユーザーがパンを選択したと仮定します)
アクティビティ E - パンのリスト (リストビューが再び表示されます)
アクティビティ F - アクティビティ E から選択 - (ユーザーは、たとえば白パン)

アクティビティ F には保存ボタンがあり、ユーザーが私の例に基づいてモーニング スナックを選択したので、アクティビティ f のデータをモーニング スナック テーブルに保存する必要があります。これどうやってするの?

私の例では、朝食にのみ保存されます。しかし、朝食ではなく朝のおやつを選ぶと、ここで問題が発生します。ユーザーが以前のアクティビティから選択したものを取得して、それぞれの食事に保存するにはどうすればよいですか?

私はこれがこれと関係があることを知っています:

BreakFastLog entry = new BreakFastLog(Baguettes_Bagels.this);
        entry.open();   
        entry.createEntry(mealname, servng, strDate);
        entry.close();

if else ステートメントを入れなければなりませんが、これを実装する賢い方法が思い浮かびません。事前にご協力いただきありがとうございます。

ノート:

私はこれをやってみました:

 Bundle extras = getIntent().getExtras();

            String breakfast = this.getIntent().getStringExtra("key_breakfast");
            String ms = this.getIntent().getStringExtra("key_morningsnack");
            String lunch = this.getIntent().getStringExtra("key_lunch");
            String as = this.getIntent().getStringExtra("key_afternoonsnack");
            String dinner = this.getIntent().getStringExtra("key_dinner");
            String es = this.getIntent().getStringExtra("key_eveningsnack");



            if( extras.equals(breakfast)){
                BreakFastLog entry = new BreakFastLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(ms) ){ 
                MorningSnackLog entry = new MorningSnackLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(lunch) ){
                LunchLog entry = new LunchLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(as) ){
                AfternoonSnackLog entry = new AfternoonSnackLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(dinner) ){
                DinnerLog entry = new DinnerLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }
            else if( extras.equals(es) ){
                EveningSnackLog entry = new EveningSnackLog(Baguettes_Bagels.this);
                entry.open();   
                entry.createEntry(mealname, servng, strDate);
                entry.close();
            }

無駄に。これを実行して保存ボタンをクリックすると、例外ハンドラーによってキャッチされます。

4

2 に答える 2

3
if( extras.equals(breakfast))

true を返すことはありません。この場合、バンドルを文字列と比較しています。バンドルをセットアップする方法にもいくつかの問題があります。バンドルに実際に必要なのは、食事の種類 (以下の KEY_MEAL) の 1 つのプロパティだけです。このようなものを試してみてください...

public static final String MEAL_BREAKFAST = "breakfast";
public static final String MEAL_MORNING_SNACK = "morning_snack";
public static final String MEAL_LUNCH = "lunch";
public static final String KEY_MEAL = "meal";

Bundle bundle1 = new Bundle();
bundle1.putString(KEY_MEAL, MEAL_MORNING_SNACK); //change "MEAL_MORNING_SNACK" to whatever meal type was clicked

Intent i = new Intent();
i.putExtras(bundle1);
startActivity(i);

そして次の活動で…

Bundle bundle2 = getIntent().getExtras();
if(bundle2.getString(KEY_MEAL).equals(MEAL_BREAKFAST))
    // meal is breakfast
else if(bundle2.getString(KEY_MEAL).equals(MEAL_MORNING_SNACK))
    // meal is morning snack
else if(bundle2.getString(KEY_MEAL).equals(MEAL_LUNCH))
    // meal is lunch
于 2013-01-24T17:47:44.023 に答える
0

を使用して、あるクラスから別のクラスに変数と値を渡すことができますintent。ホテル プロジェクトで使用したサンプル コードは次のとおりです。それがあなたを助けることを願っています

Intent in = new Intent(getApplicationContext(), goal.class);
in.putExtra("h_id", h_id);
in.putExtra("lat1", lat1);
in.putExtra("lon1", lon1);
startActivity(in);

ここで、このようにして、意図を持って次のクラスの実行を開始し、現在のクラスから次の値goal classを使用して値を渡すことができますin.putExtras("varible_name in new class, value ")

そして、新しいクラスの目標の使用で

Intent in = getIntent();
        h_id = in.getStringExtra("h_id");
        lat1 = in.getDoubleExtra("lat1", 0);
        lon1 = in.getDoubleExtra("lon1", 0);
于 2013-01-24T17:54:05.953 に答える