Activity.showDialog(DIALOG_ID);
'u kullanarak,numaralı makalede anlatıldığı gibi DialogFragment
sistemini kullanmak için iletişim kutularını taşıyorum. İşteDialogFragment yönlendirmede geri dönüşü değiştir
basit diyalog bazı örnek kod var:
public class DialogTest extends DialogFragment {
public interface DialogTestListener {
public void onDialogPositiveClick(DialogFragment dialog);
}
// Use this instance of the interface to deliver action events
static DialogTestListener mListener;
public static DialogTest newInstance(Activity activity, int titleId, int messageId) {
udateListener(activity);
DialogTest frag = new DialogTest();
Bundle args = new Bundle();
args.putInt("titleId", titleId);
args.putInt("messageId", messageId);
frag.setArguments(args);
return frag;
}
public static void udateListener(Activity activity) {
try {
// Instantiate the NoticeDialogListener so we can send events with it
mListener = (DialogTestListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString() + " must implement DialogTestListener");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int titleId = getArguments().getInt("titleId");
int messageId = getArguments().getInt("messageId");
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// dialog title
builder.setTitle(titleId);
// dialog message
builder.setMessage(messageId);
// dialog negative button
builder.setNegativeButton("No", new OnClickListener() {
public void onClick(DialogInterface dialog, int id) {}});
// dialog positive button
builder.setPositiveButton("Yes", new OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mListener.onDialogPositiveClick(DialogTest.this);
}});
// create the Dialog object and return it
return builder.create();
}}
geri iletişim kutusunu açtığınızda etkinlik/fragmanına bazı olay sunmak için geri aramalar kullanırken benim gelişimi sırasında ortaya çıkan bir soru var Ve işte size bazı aktivite kodları diyoruz:
public class SomeActivity extends FragmentActivity implements DialogTestListener {
private EditText mUserName;
@Override
public void onCreate(Bundle savedInstanceState) {
// setup ui
super.onCreate(savedInstanceState);
setContentView(R.layout.ui_user_edit);
// name input
mUserName = (EditText) findViewById(R.id.userEdit_editTextName);
}
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
Log.d(TAG, this.toString());
mUserName.setText(mUserName.getText() + "1");
}
private void showDialog() {
DialogTest test = DialogTest.newInstance(SomeActivity.this, R.string.someTitleText, R.string.someMessageText);
test.show(getSupportFragmentManager(), "testDialog");
}}
Kod, referansı gördüğünüze göre oldukça fazla. Sorun şu ki, bir yönlendirme yaptığınızda, bir iletişim kutusu görüntülendiğinde, beklendiği gibi çalışmayı durdurur -> Etkinlik yaşam döngüsü nedeniyle, hem etkinlik hem de iletişim kutusu yeniden oluşturulur ve iletişim kutusu artık uygun değildir. yeni yeniden oluşturulmuş etkinliğe referans. Ben beklenen davranış almak ve bir oryantasyon değişikliği meydana geldiğinde iletişim yeni yeniden inşa faaliyeti geri olayları gönderir Bunu yapmak
@Override
protected void onResume() {
super.onResume();
DialogTest.udateListener(this);
}
:
benim activitys için onResume yöntemi aşağıdaki kodu eklendi.Soruma ilişkin soru: Yön değiştirme sırasında bir FragmentActivity tarafından açılan DialogFragment arasındaki geri bildirimleri işlemek için 'en iyi uygulama' nedir?
Saygılarımızla
Pek çok Fragment tuzağına düştüğünüze benziyor. Sizinle aynı problemi yaşadım ve bu mükemmel makaleyi okurken düzeltebildim: http://code.hootsuite.com/orientation-changes-on-android/. –