2013-06-24 16 views
10

FragmentActivity yerine Activity kullanırken DialogFragment kullanmak mümkün mü? show() yöntemlerinin bir FragmentManager olması gerekir.FragmentActivity olmaksızın DialogFragment

Sadece bir tane EditText içeren bir İletişim Kutusu uygulamak istiyorum ve android geliştiricilerdeki eğiticiler bir iletişim parçasında özel bir düzen kullanmam gerektiğini söylüyor. Bu yüzden ben sadece 1 iletişim kutusu için FragmentActivity kullanmak için değiştirmek gibi hissetmiyorum sordu.

ÇÖZÜM: Activity yerine FragmentActivity kullanmak için karar verdim, bu yüzden daha karmaşık olmayacaktır.

+0

Lütfen yeterince açık olmadığı için lütfen sorunuzu düzenleyin. Activity sınıfını genişleterek DialogFragment'inizi uygulamaya çalışıyor musunuz? – Marek

+0

Hayır, Activity'ı genişleten bir özel sınıfta bir DialogFragment kullanmayı deniyordum. Eğiticiler, özel sınıfın Etkinlik yerine FragmentActivity'i uzatması gerektiğini söylüyor. Bu yüzden Aktiviteyi uzatabilir miyim diye soruyordum. –

+0

Bunu yapmaya çalıştın mı? Herhangi bir sorunla karşılaştı? – Marek

cevap

0

Tüm parçalarınız için bir iletişim penceresine ihtiyacınız varsa, parça etkinliğiyle ilgili etkinlikler için normal dialog code'u kullanmanız yeterlidir. Aksi takdirde, bunu Fragman Etkinliği'nin alt öğesi olarak DialogFragment uygulamasında uygulayın.

17

Aynı sorunla karşılaştım. Bunu bir yıl önce sorduğunu biliyorum ama yine de diğer kullanıcılara yardım etmek için. Sorunu böyle çözdüm.

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

Bu, FragmentManager içe aktarma işlemini değil, FragmentManager içe aktarmayı gerektirir.

+5

V7 destek kütüphanesini kullanıyorsanız, bunun yerine "getSupportFragmentManager()" ı çağırmanız gerekir. Çok teşekkür ederim! –

+0

Not! Minimum API Seviye 11 gerektirir. –

0

Aynı problemi yaşadım ancak aşağıda bağlantılı yığın-taşma sonrası cevapların yardımıyla düzeltmeyi başardım. Özellikle mrolcsi'nin çözümünü olumlu/olumsuz sonuç dinleyici konsepti ile çok beğendim, bu da bana göre çok düzgün bir sonuç verdi.

Get value from DialogFragment

2

Belki biraz geç ama ben de bir sigara FragmentActivity bir DialogFragment aramaya sorun vardı. Ayrıca basit bir diyalog için sadece FragmentActivity yapmak mantıklı olmaz. Bu yüzden benim için çözüm, aktivitede DialogFragment yanıtını almak için bir geri arama boşluğu olan bir arayüz yapmaktı. Benim için bir onActivityResult geçersiz kılmada bir yere almak yerine, iletişim çağrısının yanında yanıt almak daha iyi olur.

arayüzü:

import android.os.Parcelable; 

/** 
* Created by TH on 03.11.2015. 
*/ 
public interface OnDialogResponseListener extends Parcelable { 

    void onDialogResponse(int responseCode); 

} 

jenerik iletişim sınıfı:

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(); 
    } 
} 

Ve kullanım böyle olacağını:

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"); 

hepsi bu. Belki bir simle Diyaloğuna göre biraz daha fazla kod ama onun değerlerini ve yönünü oryantasyon değişiminde tutar. DialogFragmenti kullanmamdaki amacım buydu.

+0

Çok, güzel ve çalışma çözümüne çok teşekkür ederim! –

İlgili konular