2016-08-31 3 views
0

Я пытаюсь создать пользовательский AlertDialog, но у меня есть одна проблема.AlertFragments с поддержкой android v4 library

Мой бдительный класс Диалог ниже:

class AddNewDayAlert : DialogFragment 
{ 
    public static AddNewDayAlert NewInstance(Bundle bundle) 
    { 
     AddNewDayAlert fragment = new AddNewDayAlert(); 
     fragment.Arguments = bundle; 
     return fragment; 
    } 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     // Use this to return your custom view for this Fragment 
     View view = inflater.Inflate(Resource.Layout.AddNewDayLayout, container, false); 

     Button btn = view.FindViewById<Button>(Resource.Id.dialog_text); 
     EditText txt = view.FindViewById<EditText>(Resource.Id.dialog_text); 
     btn.Click += delegate 
     { 
      string day_name; 
      if (txt.Text != "" && txt.Text != null) 
      { 
       day_name = txt.Text; 
       Toast.MakeText(this.Activity, "Sėkmingai pridėta!!!", ToastLength.Long).Show(); 
       Dismiss(); 
      } 

      else 
       Toast.MakeText(this.Activity, "Pamiršote įvesti dienos pavadinimą!", ToastLength.Long).Show(); 
     }; 

     return view; 
    } 

} 

и проблема здесь:

 Android.Support.V4.App.FragmentTransaction ft = FragmentManager.BeginTransaction(); 
     Fragment prev = FragmentManager.FindFragmentByTag("dialog"); 
     if (prev != null) 
     { 
      ft.Remove(prev); 
     } 
     ft.AddToBackStack(null); 

     AddNewDayAlert fragmentas = AddNewDayAlert.NewInstance(null); 
     fragmentas.Show(ft, "dialog"); 

В последней строке я получаю сообщение об ошибке, потому что fragmentas.Show() использует Android.App.FragmentTransaction и I я использую Android.Support.V4.App.FragmentTransaction.

Если я пытаюсь использовать Android.App.FragmentTransaction я получаю сообщение об ошибке в первой строке: enter image description here

Может быть, есть способ конвертировать? Что мне делать ?

ответ

0

Вы сталкиваетесь с двумя разными классами FragmentTransaction. Если вы решите использовать Support v4 Fragments, то вы захотите использовать Support v4 FragmentTransaction.

https://developer.android.com/reference/android/app/FragmentTransaction.html

https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html

Вы также должны убедиться, что вы используете AppCompatActivity (который наследует FragmentActivity и имеет ссылку на Android.Support.V4.App.FragmentManager), если вы идете вниз маршрут v4. Таким образом, у вас будет доступ к SupportFragmentManager, который будет иметь тот же тип.

EX:

[Activity(Label = "App7", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : AppCompatActivity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     // SetContentView (Resource.Layout.Main); 

     Android.Support.V4.App.FragmentTransaction ft = SupportFragmentManager.BeginTransaction(); 

    } 
} 
+0

Я знаю, но это все еще не работает, здесь сс: https://gyazo.com/84aa39ed9a548fd47f54621db8882aa0 – armandasalmd

+0

См. Мой обновленный ответ. Вместо этого вам нужно будет использовать «AppCompatActivity» и «SupportFragmentManager». –

0

Ваш класс AddNewDayAlert должен также наследовать от V4 DialogFragment

class AddNewDayAlert : Android.Support.V4.App.DialogFragment