2015-02-11 11 views
8

Tôi đang cố gắng thiết lập chuyển tiếp nhập và thoát cho một DialogFragment, có vẻ như đủ về phía trước. Đây là đoạn mã từ DrinkDetailActivity tôi tạo ra hộp thoại:Đặt đoạn Android nhập và thoát chuyển tiếp?

fab.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      //create and display the dialog 
      DialogFragment orderFragment = new OrderDrinkDialogFragment(); 

      //set the slide transition for the fragment 
      Transition dialSlide = new Slide(); 
      dialSlide.setDuration(300); 

      orderFragment.setEnterTransition(dialSlide); 
      orderFragment.setExitTransition(dialSlide); 
      orderFragment.show(getFragmentManager(), "order"); 
     } 
    }); 

Và đây là mã từ OrderDrinkDialogFragment Lớp tôi:

public class OrderDrinkDialogFragment extends DialogFragment 
{ 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) 
    { 
     AlertDialog.Builder builder = new AlertDialog.Builder(DrinkDetailActivity.activity); 

     //set up the Linear Layout of the dialog 
     LinearLayout layout = new LinearLayout(DrinkDetailActivity.activity); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
                    LinearLayout.LayoutParams.WRAP_CONTENT); 
     layout.setOrientation(LinearLayout.VERTICAL); 
     layout.setLayoutParams(params); 

     //set up the EditText view 
     EditText nameField = new EditText(DrinkDetailActivity.activity); 
     nameField.setHint(R.string.dialog_name_hint); 

     //add the EditText view to the layout 
     layout.addView(nameField, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
                  LinearLayout.LayoutParams.WRAP_CONTENT)); 

     //set layout as the view of the dialog 
     builder.setView(layout); 

     return builder.create(); 
    } 
} 

DrinkDetailActivity.activity đơn giản this là từ bên trong thể hiện của DrinkDetailActivity. Vì một lý do nào đó, hộp thoại sẽ không chuyển đổi khi tôi show() hoặc khi nó bị loại bỏ, nó sẽ xuất hiện trong và ngoài tầm nhìn. This hướng dẫn đã giúp tôi rất nhiều trong việc tìm ra các chuyển đổi Hoạt động cho phần còn lại của ứng dụng của tôi, và tôi đã làm theo hướng dẫn tương tự cho quá trình chuyển đổi phân đoạn như nó nói. Tôi đang làm gì sai?

Trả lời

9

này làm việc cho me.My trượt lên phim hoạt hình là

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:duration="@android:integer/config_mediumAnimTime" 
     android:fromYDelta="100%" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:toXDelta="0" /> 

</set> 

và hình ảnh động trượt của tôi là

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:duration="@android:integer/config_mediumAnimTime" 
     android:fromYDelta="0%p" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:toYDelta="100%p" /> 

</set> 

trong phong cách của bạn thêm này

<style name="DialogAnimation"> 
    <item name="android:windowEnterAnimation">@anim/slide_up</item> 
    <item name="android:windowExitAnimation">@anim/slide_down</item> 
</style> 

bây giờ cuối cùng trong onCreateDialog() của bạn của Dialog fragment thêm này

public Dialog onCreateDialog(Bundle savedInstanceState) 
{ 
    final Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; 
    return dialog; 
} 
+0

Nếu tôi làm điều đó, tôi nhận được lỗi này: 'java.lang.NullPointerException: Cố gắng gọi android 'android.view.Window phương thức ảo'. app.Dialog.getWindow() 'trên một tham chiếu đối tượng null', mà làm cho se nse bởi vì làm thế nào tôi sẽ nhận được cửa sổ của hộp thoại trước khi nó được tạo ra? – mithunm93

+1

hãy xem câu trả lời đã chỉnh sửa – goonerDroid

+0

Tác phẩm này hoạt động! Với một vài thay đổi: 1) trong hoạt ảnh trượt lên, thay đổi "toXDelta" thành "toYDelta", 2) trong hoạt ảnh trượt lên, thay đổi "100%" và "0" thành "100% p" và "0% p" tương ứng và 3) Tôi đã thực hiện một hộp thoại 'Dialog = builder.create();' thay vì gọi super. Cảm ơn rất nhiều vì sự giúp đỡ của bạn! Không chắc chắn nếu tôi nên hỏi điều này ở đây, nhưng làm thế nào tôi sẽ đi về nhận được hộp thoại để trượt ra từ dưới thanh nav dưới cùng? – mithunm93

-1

DialogFragment không chỉ là Hộp thoại mà còn là Phân đoạn, xem Basic Dialog để biết thêm chi tiết về cách sử dụng. Bạn đã sử dụng onCreateDialog bên trong một Fragment có thể là nguyên nhân của vấn đề của bạn. Vì vậy, hãy sử dụng onCreateView để tạo chế độ xem hộp thoại phân đoạn của bạn.

Hy vọng câu trả lời này sẽ giúp bạn.

+3

câu trả lời sai, vui lòng xem phần Alert Dialog ở đây: http://developer.android.com/reference/android/app/DialogFragment.html –

0

Bạn cần phải viết một phong cách cho hiển thị hình ảnh động trên bất kỳ cửa sổ như Dialog

<style name="AnimDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowAnimationStyle">@style/DialogAnimation</item> 
</style> 

<style name="DialogAnimation"> 
    <item name="android:windowEnterAnimation">@anim/fadein</item> 
    <item name="android:windowExitAnimation">@anim/fadeout</item> 
</style> 

Đối thoại của bạn, bạn cần phải nhanh chóng như

Dialog animatedDialog = new Dialog(MainActivity.this,R.style.AnimDialog); 
Các vấn đề liên quan