2016-11-09 50 views
0

MainActivityChangeBrush之間傳遞畫筆大小和畫筆形狀。Android - 通過兩個活動之間的putExtras傳遞幾個參數

主營:

static final int ACTIVITY_BRUSH_SIZE_REQUEST_CODE = 2; 
static final int ACTIVITY_BRUSH_SHAPE_REQUEST_CODE = 3; 

public void onClickBrush(View view) { 
    Intent intent = new Intent(MainActivity.this, ChangeBrush.class); 

    startActivityForResult(intent, ACTIVITY_BRUSH_SIZE_REQUEST_CODE); 
    startActivityForResult(intent, ACTIVITY_BRUSH_SHAPE_REQUEST_CODE); 
} 

ChangeBrush:

public void onClickChangeBrushSize(View view) { 
    String size = view.getTag().toString().; 

    // return the brush size to main activity 
    Bundle bundle = new Bundle(); 
    bundle.putString("size", size); 

    Intent intent = new Intent(); 
    intent.putExtras(bundle); 
    setResult(Activity.RESULT_OK, intent); 

    finish(); 
} 

public void onClickChangeBrushShape(View view) { 
    String shape = view.getTag().toString(); 

    // return the brush shape to main activity 
    Bundle bundle = new Bundle(); 
    bundle.putString("shape", shape); 

    Intent intent = new Intent(); 
    intent.putExtras(bundle); 
    setResult(Activity.RESULT_OK, intent); 

    finish(); 
} 

SelectBrush活動佈局:

enter image description here

當用戶點擊size按鈕,在按鈕活動,他們可以通過sizeshapeMainActivity。在MainActivity中,我使用onActivityResult來設置畫筆大小和形狀。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 

     Bundle bundle = data.getExtras(); 
     String color = bundle.getString("color"); 
     String size = bundle.getString("size"); 
     String shape = bundle.getString("shape"); 

     switch(requestCode) { 
      case ACTIVITY_COLOR_REQUEST_CODE: 
       fingerPainterView.setColour(Color.parseColor(color)); // set new color value 

      case ACTIVITY_BRUSH_SIZE_REQUEST_CODE: 
       Log.d("FingerPainter", "Main activity change brush size to " + size); 

      case ACTIVITY_BRUSH_SHAPE_REQUEST_CODE: 
       Log.d("FingerPainter", "Main activity change brush shape to " + shape); 
     } 

    } else if(resultCode == RESULT_CANCELED) { 
     Log.d("FingerPainter", "MainActivity canceled"); 

    } 
} 

這將記錄的返回值:

D/FingerPainter: Main activity change brush shape to null 
D/FingerPainter: Main activity change brush size to null 
D/FingerPainter: Main activity change brush shape to SQUARE 

看來返回值可以對應於正確的意圖。我不知道爲什麼它記錄了兩次形狀信息。 finish()有什麼不對嗎?我希望用戶選擇大小和形狀,然後返回到主要活動。

如果方法錯了,應該怎麼做才能通過這兩個值?

+0

你已將哪些按鈕映射到'onClickBrush'?他們全部?您應該將尺寸和形狀按鈕分成兩個單獨的意圖。 –

+0

@ cricket_007'onClickBrush'啓動'ChangeBrush'活動。在'ChangeBrush'活動中,我將大小和形狀分爲兩個意圖(方法)。 – Helen

+0

看起來'onClickBrush'此刻兩次啓動'ChangeBrush'。 –

回答

0

兩個問題我看到:

1:要調用startActivityForResult兩次。您可以使用intent.putExtra(...)來傳遞額外資訊。

2:你沒有breakswitch聲明:

switch(requestCode) { 
    case ACTIVITY_COLOR_REQUEST_CODE: 
     fingerPainterView.setColour(Color.parseColor(color)); // set new color value 
    break; 
    case ACTIVITY_BRUSH_SIZE_REQUEST_CODE: 
     Log.d("FingerPainter", "Main activity change brush size to " + size); 
    break; 
    case ACTIVITY_BRUSH_SHAPE_REQUEST_CODE: 
     Log.d("FingerPainter", "Main activity change brush shape to " + shape); 
    break; 
} 
+0

我剛剛添加了'break',它只會返回一個形狀和一個大小。它在我首先選擇形狀然後選擇大小時起作用。它會將正確的值返回給main。但如果我先選擇大小,然後選擇形狀。他們兩個都會將null返回給main。 – Helen

+0

使用'startActivityForResult'和'intent.putExtra(...)'有什麼區別?你的意思是'intent.putExtra(size,value)'? – Helen

0

如果你正試圖從一個單一的意向更新多件事情,我認爲你需要保存關閉當前數據已在活動中存在。

public void onClickBrush(View view) { 
    Intent intent = new Intent(MainActivity.this, ChangeBrush.class); 
    // intent.putExtra("shape", currentShape); // for example 

    // then, only start one Activity, with a generic request code, not one Activity twice with two codes 

換句話說,您啓動一​​個能夠更改所有數據的活動(即使您一次只更新一個值)。因此,在開始下一個活動時保存當前值,並在更新新值時將其保持原樣。那麼你不應該得到空值。

例如,形狀按鈕。

public void onClickChangeBrushShape(View view) { 
    String shape = view.getTag().toString(); 

    // return the brush shape to main activity 
    Bundle bundle = new Bundle(); 

    bundle.putString("shape", shape); // Set the new shape 

    bundle.putString("color", color); // I assume you've saved this 
    bundle.putString("size", size); // and this... 

    // You could put string extras into the intent directly, but whatever 
    Intent intent = new Intent(); 
    intent.putExtras(bundle); 
    setResult(Activity.RESULT_OK, intent); 

    finish(); 
} 

另一種選擇是使用SharedPreferences存儲所有的值,而忘記了意圖和捆綁。

+0

對不起,我不明白你的回答....你能解釋一下嗎? thx – Helen

+0

哪部分?我舉了一個例子,你正在處理許多重疊的方法和變量,我說SharedPreferences會更好。 –

+0

我認爲它只需要返回值,然後在main中設置形狀和大小,所以SharedPreferences沒有用。顏色在另一個活動中。 – Helen

相關問題