2016-06-07 2 views
0

У меня есть startActivityForResult(), вызывающий действие под названием FlavorList, которое является списком, заполненным из базы данных. Я хочу, когда я нажимаю на элемент в списке, чтобы он возвращался к активности (EditRecipe), которая вызывала его с данными. startActivityForResult() вызывается из метода showAddFlavorDialog() в EditRecipe, который открывает диалоговое окно предупреждения. Когда я нажимаю на элемент в FlavorList, он просто сидит и ничего не делаетВторое действие, вызванное из startActivityForResult, не закрывающее

showAddFlavorDialog() в EditRecipe, который вызывает 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"); 

     } 
    } 

} 

Слушатель для ListView в FlavorList.

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 

     } 

    }); 
+0

Перед тем, как закончить(), войдите в свой футляр (Constants.FROM_EDIT_RECIPE) и проверьте, где находится программа или нет. –

+0

Когда вы делаете свое намерение, Intent i = new Intent (EditRecipe.this, FlavorList.class); , вы не добавляете лишний. Затем в FlavorList вы запрашиваете дополнительную «CALLING_ACTIVITY». Я думаю, что int callActivity возвращает ноль, потому что намерение не может найти CALLING_ACTIVITY. Поэтому ваш оператор switch не соответствует нулю и проваливается. Удачи! Попробуйте метод putExtra(). – flobacca

+0

Да, я забыл сделать putExtra для случая FROM_EDIT_RECIPE. Проверенный после того, как Маддассир указал, чтобы проверить, что он туда, и увидел ваш комментарий после @flobacca, но вы были абсолютно правы. – MarinheiroTX

ответ

0

Когда вы делаете свое намерение, умысел я = новый Intent (EditRecipe.this, FlavorList.class); , вы не добавляете Extra в намерение. Затем в FlavorList вы запрашиваете Extra «CALLING_ACTIVITY». int callActivity возвращает ноль, потому что у намерения нет и не может найти Экстра с ключом CALLING_ACTIVITY. Поэтому ваш оператор switch не соответствует нулю и проваливается. Попробуйте метод putExtra() по вашему намерению.

+0

, там вы идете, теперь вы можете получить кредит – MarinheiroTX

0

Для этого вам необходимо указать свою активность в своем намерении.

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

В настоящее время вы создаете только пристальный Intent returnIntent = new Intent();, который не будет работать, пока он не знает, куда идти.

0

У вас нет @Override аннотация по вашему методу onActivityResult. Добавьте его.

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

использование getIntent вместо создания нового намерения.

Intent returnIntent = getIntent(); 
0

ОКЕЙ первую очередь вам нужно позвонить вам Intent как это,

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

и если вы посмотрите на параметры onResultActivity, он уже предоставил вам намерение результирующей деятельности, у вас нет чтобы создать один, просто используйте его.

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"); 

     } 
    } 

} 

Счастливый Coding ..

Смежные вопросы