2013-11-26 4 views
6

У меня есть вопрос, где мне нужно, чтобы показать в android.app.Dialogандроида фрагмент в диалоговом

здесь в fragment является XML-код

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:id="@+id/marchecharts" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </FrameLayout> 

</LinearLayout> 

что я хочу, чтобы заменить marchecharts мой фрагмент, может кто-нибудь помочь

благодаря

Dialog dialog = new Dialog(getActivity()); 
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog.setContentView(R.layout.marche_charts_parent); 


//this is the part I think I need 
Fragment fragment = new MarcheChartsFragment(); 
FragmentTransaction ft = ((FragmentActivity) dialog.getOwnerActivity()).getFragmentManager().beginTransaction(); 
ft.replace(R.id.marchecharts, fragment); 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
ft.addToBackStack(null); 
ft.commit(); 

dialog.setCanceledOnTouchOutside(true); 
dialog.getWindow().setLayout(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); 
dialog.show(); 

ответ

7

Usu вы напрямую используете DialogFragment, имя которого объясняется самостоятельно.

вот пример моего кода с int отправьте как arg.

Итак, в основном вы создаете DialogFragment, который распространяется на DialogFragment. Вы должны написать newInstance и onCreateDialog методов. Затем вы создаете новый экземпляр этого фрагмента в вызывающем фрагменте.

public class YourDialogFragment extends DialogFragment { 
    public static YourDialogFragment newInstance(int myIndex) { 
     YourDialogFragment yourDialogFragment = new YourDialogFragment(); 

     //example of passing args 
     Bundle args = new Bundle(); 
     args.putInt("anIntToSend", myIndex); 
     yourDialogFragment.setArguments(args); 

     return yourDialogFragment; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     //read the int from args 
     int myInteger = getArguments().getInt("anIntToSend"); 

     View view = inflater.inflate(R.layout.your_layout, null); 

     //here read the different parts of your layout i.e : 
     //tv = (TextView) view.findViewById(R.id.yourTextView); 
     //tv.setText("some text") 

     return view; 
    } 
} 

, вызывающий фрагмент диалога, делается из другого фрагмента, делая это. Обратите внимание, что значение 0 - это int, который я отправляю.

YourDialogFragment yourDialogFragment = YourDialogFragment.newInstance(0); 
YourDialogFragment.show(getFragmentManager().beginTransaction(), "DialogFragment"); 

В вашем случае, если вам не нужно, чтобы передать что-нибудь, удалите соответствующие строки в DialogFragment и не проходят никакой ценности в YourDialogFragment.newInstance()

EDIT/FOLLOW

Не уверен, чтобы действительно понять ваш вопрос. Если вам просто нужно заменить фрагмент другим, вы используете

getFragmentManager().beginTransaction().replace(R.id.your_fragment_container, new YourFragment()).commit(); 
+0

Благодарим вас за ваш ответ! У меня ошибка в onCreateDialog: Тип несоответствия: невозможно преобразовать из View в Dialog в строке «return view» –

+0

во второй раз, я не думаю, что это отвечает на проблему, потому что у меня уже есть фрагмент в руке. Мне просто нужно показать он в диалоге –

+0

Насколько я понимаю ваш вопрос. Вы хотите отобразить свой собственный фрагмент в диалоговом окне. Если это ваш вопрос, я предлагаю код. – HpTerm

Смежные вопросы