Android 从DialogInterface.OnClickListener中开始startActivityForResult
我正在尝试实现一个带有选项的对话框。每个选项都将使用Android 从DialogInterface.OnClickListener中开始startActivityForResult,android,android-intent,android-fragments,android-camera-intent,Android,Android Intent,Android Fragments,Android Camera Intent,我正在尝试实现一个带有选项的对话框。每个选项都将使用startActivityForResult启动一个活动,对话框片段将使用onActivityResult处理响应 到目前为止,我得到的是这样的东西: class ChoiceFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Build
startActivityForResult
启动一个活动,对话框片段
将使用onActivityResult
处理响应
到目前为止,我得到的是这样的东西:
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");
在我的活动中,我开始这样的片段:
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");
从注释中可以看到,未调用ActivityResult
我在几个问题中看到过这个场景,但它们似乎都假设主活动也在调用onActivityResult,或者片段被称为getActivity().startActivityForResult()
,在我的例子中这两个都不是真的。点击!
这就是答案。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);
}
}
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);
}
}
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);
}
}
MainActivity.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);
}
}
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);
}
}
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);
}
}
SecondActivity.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);
}
}
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);
}
}
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);
}
}
我想你忘了在托管活动中覆盖
onActivityResult
。但是我的托管活动根本没有调用onActivityResult
。super.onActivityResult(…)
?我刚才不是说托管活动没有调用onActivityResult
?