हो सकता है कि एक छोटा सा देर से लेकिन मैं यह भी समस्या एक गैर FragmentActivity से एक DialogFragment कॉल करने के लिए किया था। एक साधारण संवाद के लिए इसे एक फ्रैगमेंट एक्टिविटी बनाने के लिए भी समझदारी नहीं होगी। तो मेरे लिए समाधान गतिविधि में डायलॉगफ्रैगमेंट प्रतिक्रिया प्राप्त करने के लिए कॉलबैक शून्य के साथ एक इंटरफ़ेस बनाना था। मेरे लिए एक एक्टिविटी रिसॉर्ट ओवरराइड में इसे कहीं भी प्राप्त करने के बजाय संवाद कॉल के पास प्रतिक्रिया प्राप्त करना बेहतर है।
इंटरफ़ेस:
import android.os.Parcelable;
/**
* Created by TH on 03.11.2015.
*/
public interface OnDialogResponseListener extends Parcelable {
void onDialogResponse(int responseCode);
}
सामान्य संवाद वर्ग:
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
/**
* Code basisc found here:
* http://stackoverflow.com/questions/7977392/android-dialogfragment-vs-dialog
* changed by TH on 03.11.2015.
*/
public class YesNoDialog extends DialogFragment
{
public static final String TITLE="title";
public static final String MESSAGE="message";
public static final String LISTENER="listener";
public static final String YES="yes";
public static final String NO="no";
public static final String ICON_ID="icon_id";
private OnDialogResponseListener mResponseListener;
public YesNoDialog()
{
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
Bundle args = getArguments();
String title = args.getString(TITLE, "");
String message = args.getString(MESSAGE, "");
String yes = args.getString(YES, "");
String no = args.getString(NO, "");
int iconID=args.getInt(ICON_ID);
mResponseListener=args.getParcelable(LISTENER);
return new AlertDialog.Builder(getActivity())
.setTitle(title)
.setMessage(message)
.setIcon(iconID)
.setPositiveButton(yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mResponseListener != null) {
mResponseListener.onDialogResponse(Activity.RESULT_OK);
}
}
})
.setNegativeButton(no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mResponseListener != null) {
mResponseListener.onDialogResponse(Activity.RESULT_CANCELED);
}
}
})
.create();
}
}
और उपयोग इस तरह होगा:
OnDialogResponseListener onDialogResponseListener=new OnDialogResponseListener() {
@Override
public int describeContents() {
return 0; //Leave this as it is
}
@Override
public void writeToParcel(Parcel dest, int flags) {
//Leave this as it is
}
@Override
public void onDialogResponse(int responseCode) {
//Do what you want with your dialog answers
if(responseCode== Activity.RESULT_OK){
Toast.makeText(MovementActivity.this,"OK pressed",Toast.LENGTH_LONG).show();
}else if(responseCode==Activity.RESULT_CANCELED){
Toast.makeText(MovementActivity.this,"CANCEL pressed",Toast.LENGTH_LONG).show();
}
}
};
YesNoDialog dialog = new YesNoDialog();
Bundle args = new Bundle();
args.putInt(YesNoDialog.ICON_ID, R.drawable.ic_action_add_light);
args.putString(YesNoDialog.YES, getString(R.string.action_add));
args.putString(YesNoDialog.NO, getString(R.string.action_cancel));
args.putString(YesNoDialog.TITLE, getString(R.string.dialog_title_add_item));
args.putString(YesNoDialog.MESSAGE, getString(R.string.dialog_message_add_item));
args.putParcelable(YesNoDialog.LISTENER, onDialogResponseListener);
dialog.setArguments(args);
dialog.show(getSupportFragmentManager(), "tag");
है बस इतना ही। हो सकता है कि सिमल डायलॉग की तुलना में थोड़ा और कोड हो लेकिन यह अभिविन्यास परिवर्तन पर इसके मूल्यों और शो रखता है। डायलॉग फ्रैगमेंट का उपयोग करने के लिए यह मेरा लक्ष्य था।
स्रोत
2015-11-03 09:39:39
कृपया अपना प्रश्न संपादित करें क्योंकि यह पर्याप्त स्पष्ट नहीं है। क्या आप गतिविधि कक्षा को बढ़ाकर अपने संवाद प्रारूप को लागू करने की कोशिश कर रहे हैं? – Marek
नहीं, मैं एक कस्टम क्लास पर डायलॉग फ्रैगमेंट का उपयोग करने की कोशिश कर रहा था जो गतिविधि को बढ़ाता है। ट्यूटोरियल का कहना है कि कस्टम वर्ग को गतिविधि के बजाय फ्रैगमेंट एक्टिविटी का विस्तार करना चाहिए। तो मैं पूछ रहा था कि क्या मैं गतिविधि को विस्तारित कर सकता हूं। –
क्या आपने ऐसा करने की कोशिश की? किसी भी समस्या का सामना किया? – Marek