2

Я пытаюсь реализовать диалог с выбором. Каждый выбор начнет свою деятельность с использованием startActivityForResult, а DialogFragment будет обрабатывать ответ с использованием onActivityResult.startActivityForResult изнутри DialogInterface.OnClickListener

Пока что у меня есть что-то вроде этого:

class ChoiceFragment extends DialogFragment { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setItems(sources, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       if (which == 0) { 
        Intent intent = new Intent(SomeActivity.class); 
        startActivityForResult(intent, 0); 
       } 
       dialog.dismiss(); 
      } 
     }); 

     return builder.create(); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // This never gets called 
    } 
} 

И в моей деятельности, я начинаю фрагмент так:

ChoiceFragment frag = new ChoiceFragment(); 
frag.show(getFragmentManager(), "choices"); 

Как видно из комментария, onActivityResult не вызывается.

Я видел этот сценарий, упомянутый в нескольких вопросах, но все они, похоже, полагают, что основной актив также вызывал onActivityResult или что этот фрагмент был вызван getActivity().startActivityForResult(), ни один из которых не является истинным в моем случае.

+0

Я думаю, что вы забыли о verride 'onActivityResult' в хостинговой деятельности. –

+0

Но мой хостинг не вызывает 'onActivityResult' вообще ... – blockhead

+0

с' super.onActivityResult (...) '? –

ответ

2

ChoiceFragment.java:

package com.example.AndroidTest; 

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

/** 
* @autor Sergey Shustikov 
*/ 
class ChoiceFragment extends DialogFragment { 

    private CharSequence[] sources = new CharSequence[]{"Second"}; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setItems(sources, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       if (which == 0) { 
        Intent intent = new Intent(getActivity(),SecondActivity.class); 
        getActivity().startActivityForResult(intent, 0); 
       } 
       dialog.dismiss(); 
      } 
     }); 

     return builder.create(); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.d("ResultA","This is choice"); 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

MainActivity.java:

package com.example.AndroidTest; 

import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class MyActivity extends Activity { 
    private ChoiceFragment frag; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     frag = new ChoiceFragment(); 
     fragmentTransaction.add(frag,"choices"); 
     fragmentTransaction.commit(); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.d("ResultA", "This is HostActivity"); 
     super.onActivityResult(requestCode, resultCode, data); 
      frag.onActivityResult(requestCode, resultCode, data); 
    } 
} 

SecondActivity.java:

package com.example.AndroidTest; 

import android.app.Activity; 
import android.os.Bundle; 

/** 
* @autor Sergey Shustikov 
*/ 
public class SecondActivity extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
} 
Смежные вопросы