2016-07-01 10 views
2

Ich möchte ein Fragment in einen benutzerdefinierten Dialog in Aktivität einfügen.ANDROID Fragment in einem benutzerdefinierten Dialogfeld in Aktivität

erhalte ich diesen Fehler:

java.lang.IllegalArgumentException: No view found for id 0x7f0c007e (copyworld.rebootcw:id/container_schedule1) for fragment FragmentGiorno{418215c0 #0 id=0x7f0c007e} 

Dies ist mein Code:

layout.xml

<FrameLayout 
    android:layout_width="fill_parent" 
    android:layout_height="200dp" 
    android:layout_below="@+id/spinner_dialog_schedulazione" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="20dp" 
    android:layout_marginLeft="20dp" 
    android:layout_marginRight="20dp" 
    android:id="@+id/container_schedule1"> 

</FrameLayout> 

MainActivity.java

public class MainActivity extends AppCompatActivity { 


     @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

Popup_schedule(); 
} 


//******POPUP PER LA SCHEDULAZIONE****************** 

public void Popup_schedule() { 
    dialog_schedule=new Dialog(MainActivity.this); 
    dialog_schedule.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
    dialog_schedule.setContentView(R.layout.dialog_schedule); 
    dialog_schedule.setCancelable(false); 
    lp = new WindowManager.LayoutParams(); 
    window = dialog_schedule.getWindow(); 
    lp.copyFrom(window.getAttributes()); 
    lp.width = WindowManager.LayoutParams.WRAP_CONTENT; 
    lp.height = WindowManager.LayoutParams.WRAP_CONTENT; 
    dialog_schedule.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
    window = dialog_schedule.getWindow(); 
    window.setAttributes(lp); 


       FragmentGiorno fragment = new FragmentGiorno(); 
       android.support.v4.app.FragmentTransaction fragmentTransaction = 
         getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.container_schedule1, fragment); 
       fragmentTransaction.commit(); 

    dialog_schedule.show(); 

} 
} 

Wie füge ich ein Fragment in einem benutzerdefinierten Dialogfeld in MainActivity.java hinzu, die Aktivität erweitern?

+0

Ich habe nicht getestet, sondern wollte ein paar potentielle Punkte hinzuweisen - 'onCreate()', um den Inhalt im Hinblick auf 'R.id Einstellung .activity_main', aber dein Beitrag erwähnt 'layout.xml'. Überprüfen Sie einfach, dass dies tatsächlich activity_main.xml in Ihrem res/Layout-Ordner ist. Zweitens sollte 'android: layout_below =" @ + id/spinner_dialog_schedulazione "' kein + nach dem @ -Zeichen enthalten, da das Element, auf das du dich beziehst, eine eigene ID haben sollte (anstatt zu versuchen, eine zu erstellen) –

+0

Ist deine activity_main .xml 'enthält das' FrameLayout' mit der ID 'container_schedule1' ?? –

+0

Entschuldigung, mein Layout ist activity_main.xml –

Antwort

0

dieses

dialog_schedule.findViewById(R.id.container_schedule1) 

Stattdessen versuchen,

R.id.container_schedule1 

in Ihrem Code

+0

ich versuche dies: FrameLayout container_schedule = (FrameLayout) dialog_schedule.findViewById (R.id.container_schedule); –

+0

Setzen Sie das container_schedule auf Fragment ersetzen oder direkt als meine Antwort –

1

If you want to load fragment inside dialog then you can use DialogFragment instead.

Unter dem Arbeitsbeispiel ist DialogFragment zu verwenden.

public class Demo extends DialogFragment{ 

View mainView; 

LinearLayout layoutArrow; 

Bundle bundle; 
ArrayList<BookingDetail> bookingDetails; 
View.OnClickListener onClickListener; 
public static Demo newInstance(@NonNull ArrayList<BookingDetail> bookingDetails) { 
    Demo alertPopUpMapReservedBedInfo = new Demo(); 
    Bundle args = new Bundle(); 
    args.putSerializable("bookingDetails", bookingDetails); 
    alertPopUpMapReservedBedInfo.setArguments(args); 

    return alertPopUpMapReservedBedInfo; 
} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(STYLE_NO_TITLE, R.style.InvitationDialogWithSimpleAnim); 
    bundle = getArguments(); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    mainView = inflater.inflate(R.layout.alert_info, container, false); 
    getDialog().setCanceledOnTouchOutside(true); 

    return mainView; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    init(); 
} 

private void init() { 
    layoutArrow = (LinearLayout) mainView.findViewById(R.id.layoutArrow); 

FragmentGiorno fragment = new FragmentGiorno(); 
      android.support.v4.app.FragmentTransaction fragmentTransaction = 
        this.getChildFragmentManager().beginTransaction(); 
      fragmentTransaction.replace(R.id.container_schedule1, fragment); 
      fragmentTransaction.commit(); 
} 



@Override 
public void onDismiss(DialogInterface dialog) { 
    super.onDismiss(dialog); 
    if(onClickListener!=null){ 
     onClickListener.onClick(null); 
    } 
} 
} 

Und es durch nennen,

Demo newFragment = Demo.newInstance(bookingDetails); 
    newFragment.show(ft,"dialog"); 
Verwandte Themen