2013-06-24 6 views
10

के बिना संवाद फ़्रेगमेंट FragmentActivity के बजाय Activity का उपयोग करते समय DialogFragment का उपयोग करना संभव है? show() विधियों को FragmentManager की आवश्यकता है।FragmentActivity

मैं एक संवाद लागू करना चाहता हूं जिसमें केवल एक EditText है, और एंड्रॉइड डेवलपर्स पर ट्यूटोरियल का कहना है कि मुझे एक संवाद खंड पर एक कस्टम लेआउट का उपयोग करना है। इसलिए मैंने पूछा कि मुझे 1 संवाद के लिए FragmentActivity का उपयोग करने के लिए बदलने की तरह महसूस नहीं होता है।

सोल्वेड: मैंने Activity के बजाय FragmentActivity का उपयोग करने का निर्णय लिया ताकि यह अधिक जटिल न हो।

+0

कृपया अपना प्रश्न संपादित करें क्योंकि यह पर्याप्त स्पष्ट नहीं है। क्या आप गतिविधि कक्षा को बढ़ाकर अपने संवाद प्रारूप को लागू करने की कोशिश कर रहे हैं? – Marek

+0

नहीं, मैं एक कस्टम क्लास पर डायलॉग फ्रैगमेंट का उपयोग करने की कोशिश कर रहा था जो गतिविधि को बढ़ाता है। ट्यूटोरियल का कहना है कि कस्टम वर्ग को गतिविधि के बजाय फ्रैगमेंट एक्टिविटी का विस्तार करना चाहिए। तो मैं पूछ रहा था कि क्या मैं गतिविधि को विस्तारित कर सकता हूं। –

+0

क्या आपने ऐसा करने की कोशिश की? किसी भी समस्या का सामना किया? – Marek

उत्तर

0

यदि आपको अपने सभी टुकड़ों के लिए एक अत्यधिक संवाद की आवश्यकता है, तो टुकड़े की गतिविधि के साथ गतिविधियों के लिए सामान्य dialog code का उपयोग करें। अन्यथा, इसे फ्रैगमेंट गतिविधि के बच्चे के रूप में डायलॉग फ्रैगमेंट में लागू करें।

17

मुझे एक ही समस्या का सामना करना पड़ा। मुझे पता है कि आपने एक साल पहले यह पूछा था, लेकिन फिर भी अन्य उपयोगकर्ताओं की मदद करने के लिए। इस तरह मैंने समस्या का समाधान किया।

public void show_dialog() { 
    FragmentManager fm = getFragmentManager(); 
    DialogFragment newFragment = new DialogFragment(); 
    newFragment.show(fm, "abc"); 
} 

यह केवल FragmentManager आयात की आवश्यकता है, न कि FragmentActivity।

+5

यदि आप V7 समर्थन लाइब्रेरी का उपयोग कर रहे हैं तो आपको इसके बजाय "getSupportFragmentManager()" कॉल करना होगा। आपका बहुत बहुत धन्यवाद! –

+0

नोट! इसके लिए न्यूनतम एपीआई स्तर 11 –

0

मुझे एक ही समस्या थी, लेकिन नीचे दिए गए स्टैक-ओवरफ्लो पोस्ट में उत्तरों की मदद से इसे ठीक करने में कामयाब रहा। मुझे विशेष रूप से सकारात्मक/नकारात्मक परिणाम श्रोता अवधारणा के साथ mrolcsi के समाधान पसंद आया, जिसने मेरे अनुसार एक बहुत साफ परिणाम दिया।

Get value from DialogFragment

2

हो सकता है कि एक छोटा सा देर से लेकिन मैं यह भी समस्या एक गैर 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"); 

है बस इतना ही। हो सकता है कि सिमल डायलॉग की तुलना में थोड़ा और कोड हो लेकिन यह अभिविन्यास परिवर्तन पर इसके मूल्यों और शो रखता है। डायलॉग फ्रैगमेंट का उपयोग करने के लिए यह मेरा लक्ष्य था।

+0

बहुत धन्यवाद, अच्छा और कामकाजी समाधान की आवश्यकता है! –

संबंधित मुद्दे