簡體   English   中英

從startActivityForResult調用的第二個活動未關閉

[英]Second activity called from startActivityForResult not closing

我有startActivityForResult()調用一個名為FlavorList的活動,該活動是從數據庫填充的列表視圖。 我想要,當我單擊列表中的項目以使其返回到使用數據調用它的活動(EditRecipe)時。 從EditRecipe中的showAddFlavorDialog()方法中調用startActivityForResult(),該方法將打開一個警報對話框。 當我單擊FlavorList中的項目時,它只是坐在那里,什么也不做

EditRecipe中的showAddFlavorDialog()調用startActivityForResult()和onActivityResult:

protected void showAddFlavorDialog(){
    LayoutInflater layoutInflater = LayoutInflater.from(EditRecipe.this);
    View promptView = layoutInflater.inflate(R.layout.add_recipe_flavor_alert, null);
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(EditRecipe.this);
    alertDialogBuilder.setView(promptView);

    final EditText percentageET = (EditText) promptView.findViewById(R.id.is_flavorpercentage);
    final TextView flavorNameTV = (TextView) promptView.findViewById(R.id.txt_flavor_name);
    final TextView flavorVendorTV = (TextView) promptView.findViewById(R.id.txt_flavor_vendor);

    final LinearLayout flavorLayout = (LinearLayout) promptView.findViewById(R.id.add_flavor_layout);

    flavorLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(EditRecipe.this, FlavorList.class);
            request_Code = 1;
            startActivityForResult(i, request_Code);
            if(tempFlavorName != null) {
                flavorNameTV.setText(tempFlavorName);
                flavorVendorTV.setText(tempFlavorVendor);
            }

        }
    });


    alertDialogBuilder.setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
    addFlavorAlert = alertDialogBuilder.create();
    addFlavorAlert.show();
}//end showAddFlavorDialog

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode == request_Code)
    {
        if(resultCode == RESULT_OK)
        {
            Bundle extras = getIntent().getExtras();
            tempFlavorName = extras.getString("FLAVOR_NAME");
            tempFlavorVendor = extras.getString("FLAVOR_VENDOR");
            tempFlavorWeight = extras.getDouble("FLAVOR_WEIGHT");

        }
    }

}

FlavorList中listview的偵聽器。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long viewId) {

            Cursor cursor = (Cursor) listView.getItemAtPosition(position);

            _id = dbManager.getFlavorID(cursor);
            flavorName = dbManager.getFlavorName(cursor);
            flavorVendor = dbManager.getFlavorVendor(cursor);
            flavorBase = dbManager.getFlavorBase(cursor);
            flavorWeight = String.valueOf(dbManager.getFlavorWeight(cursor));

            int callingActivity = getIntent().getIntExtra("CALLING_ACTIVITY", 0);

            switch (callingActivity) {
                case (Constants.FROM_MAIN):

                    showModifyDialog();

                    break;

                case (Constants.FROM_EDIT_RECIPE):

                    Intent returnIntent = new Intent();
                    returnIntent.putExtra("FLAVOR_NAME", flavorName);
                    returnIntent.putExtra("FLAVOR_VENDOR", flavorVendor);
                    returnIntent.putExtra("FLAVOR_WEIGHT", flavorWeight);
                    setResult(RESULT_OK, returnIntent);
                    finish();

                    break;
            }//end switch-case

        }

    });

為此,您需要將您的活動放在“意圖”中。

Intent returnIntent = new Intent(context, EditRecipe.class);

當前,您僅創建一個Intent Intent returnIntent = new Intent(); 直到知道要去哪里,它才起作用。

您的onActivityResult方法上沒有@Override批注。 添加它。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)

使用getIntent而不是創建新的intent。

 Intent returnIntent = getIntent();

首先,您需要這樣稱呼您的Intent

Intent returnIntent  = new Intent(classname.this, EditRecipe.class);

並且如果您查看onResultActivity參數,它已經為您提供了所產生的Activity的意圖,那么您無需創建一個,只需使用該參數即可。

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode == request_Code)
    {
        if(resultCode == RESULT_OK)
        {
            // Bundle extras = getIntent().getExtras();
            tempFlavorName = data.getString("FLAVOR_NAME");
            tempFlavorVendor = data.getString("FLAVOR_VENDOR");
            tempFlavorWeight = data.getDouble("FLAVOR_WEIGHT");

        }
    }

}

快樂編碼

在制定意圖時,意圖i =新意圖(EditRecipe.this,FlavorList.class); ,您並未在意圖中添加額外內容。 然后在FlavorList中,您要求額外的“ CALLING_ACTIVITY”。 intcallingActivity返回零,因為該意圖沒有並且無法通過鍵CALLING_ACTIVITY找到Extra。 因此,您的switch語句不匹配零,並且失敗了。 在您的意圖上嘗試方法putExtra()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM