如何将变量从活动传递到不在活动中的上一个对话框

时间:2018-04-04 13:37:07

标签: java android android-activity kotlin android-dialog

我没见过这样的情况。我有一个从对话框上的按钮启动的活动。我需要从此活动中获取变量,关闭它并将其传递回对话框。我的方法是什么?

 class ColorPickDialog(val activity: Activity, color: Int, val callback: (color: Int) -> Unit) {
lateinit var savedColorsButton: Button
val currentColorHsv = FloatArray(3)

init {
    Color.colorToHSV(color, currentColorHsv)

    val view = activity.layoutInflater.inflate(R.layout.d_colorpicker, null).apply {

        savedColorsButton = findViewById(R.id.saved_colours_button)

    savedColorsButton.setOnClickListener{
        val intent = Intent(this.activity.applicationContext, DisplayColorsActivity::class.java)
        intent.putExtra("SettingState", true)

        this.activity.applicationContext.startActivity(intent)
    }


 }

这是对话框打开的活动。

 public class DisplayColorsActivity extends Activity {
 public void displayColors() {
    ArrayList<ColourRGB> coloursList = colourStorage.getColours();

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        btn = (Button) findViewById(R.id.select_color_btn);
        if (getIntent().getExtras() != null && getIntent().getExtras().getBoolean("SettingState")) {
            btn.setVisibility(View.VISIBLE);
        }
        else {
            btn.setVisibility(View.INVISIBLE);
            Log.v("Status+", "INot there" );

        }
   } 
    public void selectButtonClicked(View view){
    finish();
    }
 }

我需要将一个变量从DisplayColorsActivity传递回ColorPick对话框,可能是在selectButtonClicked功能中(使用按钮返回到对话框)请注意第一个片段在Kotlin中,第二个在Java中< / p>

1 个答案:

答案 0 :(得分:0)

声明你选择的常数:

static final int COLOR_PICKED_REQUEST = 1234;

在对话框中替换

this.activity.applicationContext.startActivity(intent)

this.startActivityForResult(intent, COLOR_PICKED_REQUEST);

并添加方法:

public void userPickedColor(int color){
    Log.d("TAG", "COLOR:"+color);
}

DisplayColorsActivity添加:

Intent intentMessage=new Intent();   
intentMessage.putExtra("COLOR",valueOfYourColor);
setResult(COLOR_PICKED_REQUEST,intentMessage);

finish();

之上 在保存对话框的活动中

确保您有对象本身的引用,如mActionDialog,然后覆盖:

@Override
protected void onActivityResult(int requestCode, int resultCode, 
Intent data) {
    if (requestCode == COLOR_PICKED_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            int color = data.getIntExtra("COLOR"); 
            mActionDialog.userPickedColor(color);
        }
    }
}