C# 碎片内部膨胀布局
我有个问题。我使用FrameLayout来使用片段。现在,在我的一个片段中,我想创建一个带有EditText的对话框。因此,我为fragment.cs编写了以下代码:C# 碎片内部膨胀布局,c#,android-fragments,xamarin.android,C#,Android Fragments,Xamarin.android,我有个问题。我使用FrameLayout来使用片段。现在,在我的一个片段中,我想创建一个带有EditText的对话框。因此,我为fragment.cs编写了以下代码: public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.Inflate(Resource.Layout.intro_ad
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.intro_add_new_project, container, false);
ImageButton btnAddProject = view.FindViewById<ImageButton>(Resource.Id.btnAddProject);
btnAddProject.Click += delegate
{
LayoutInflater layoutinflater = LayoutInflater.From(this);
View DialogView = layoutinflater.Inflate(Resource.Layout.setup_project_name_dialog, null);
Android.Support.V7.App.AlertDialog.Builder ProjectNameDialog = new Android.Support.V7.App.AlertDialog.Builder(this);
ProjectNameDialog.SetView(DialogView);
EditText editProjectName = DialogView.FindViewById<EditText>(Resource.Id.editProjectName);
ProjectNameDialog.SetCancelable(false);
ProjectNameDialog.SetPositiveButton("Continue", delegate
{
//My own code here
});
};
return view;
}
public override视图OnCreateView(布局、充气机、视图组容器、Bundle savedInstanceState)
{
视图=充气器.充气(Resource.Layout.intro\u add\u new\u项目,容器,false);
ImageButton btnAddProject=view.FindViewById(Resource.Id.btnAddProject);
btnAddProject.单击+=委派
{
LayoutInflater LayoutInflater=LayoutInflater.From(this);
查看对话框View=LayoutFlater.Inflate(Resource.Layout.setup\u project\u name\u对话框,空);
Android.Support.V7.App.AlertDialog.Builder ProjectNameDialog=新的Android.Support.V7.App.AlertDialog.Builder(此);
ProjectNameDialog.SetView(DialogView);
EditText editProjectName=DialogView.FindViewById(Resource.Id.editProjectName);
ProjectNameDialog.SetCancelable(false);
ProjectNameDialog.SetPositiveButton(“继续”,委托
{
//我自己的代码在这里
});
};
返回视图;
}
现在,我对2x这个
有一个问题。它给出了以下错误:
无法将“Appname.Fragments.Intro\u Add\u Project”转换为
'Android.Content.Context'
我应该填写什么而不是这个。别忘了。。。。它是一个碎片
有人能帮我吗
更新
我得到的错误是:
{Java.Lang.IllegalStateException:您需要使用Theme.AppCompat
此活动的主题(或后代)。在
Java.Interop.JniEnvironment+InstanceMethods.CallObjectMethod
(Java.Interop.JniObjectReference实例,Java.Interop.JniMethodInfo
方法,Java.Interop.JniArgumentValue*args)[0x00069]in
:0 at
Java.Interop.jnipermembers+JniInstanceMethods.invokeVirtualObject方法
(System.String encodedMember,Java.Interop.IJavaPeerable self,
中的Java.Interop.JniArgumentValue*参数)[0x0002a]
:0 at
中的Android.Support.V7.App.AlertDialog+Builder.Show()[0x0000a]
:0 at
Appname.Fragments.Intro_Add_Project.b__1_0
(System.Object,System.EventArgs)[0x0005b]中的
C:\Users\Alexander\source\repos\Appname\Appname\Fragments\Intro\u Add\u Project.cs:45
---托管Java.Lang.IllegalStateException堆栈跟踪的结束---Java.Lang.IllegalStateException:您需要使用一个Theme.AppCompat
此活动的主题(或后代)。在
appcompatidelegateimplv9.createSubDecor(appcompatidelegateimplv9.java:354)
在
android.support.v7.app.AppCompateDelegateImplV9.ensureSubDecor(AppCompateDelegateImplV9.java:323)
在
android.support.v7.app.AppCompateDelegateImplV9.setContentView(AppCompateDelegateImplV9.java:284)
在
android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.java:83)
在
android.support.v7.app.AlertController.installContent(AlertController.java:226)
位于android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:260)
在android.app.Dialog.dispatchOnCreate(Dialog.java:407)上
android.app.Dialog.show(Dialog.java:302)位于
android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:958)
在mono.android.view.view\u OnClickListenerImplementor.n\u onClick(本机
方法)在
mono.android.view.view\uOnClickListenerImplementor.onClick(view\uOnClickListenerImplementor.java:30)
在android.view.view.performClick(view.java:6669)中
android.view.view.performClickInternal(view.java:6638)位于
android.view.view.access$3100(view.java:789)
查看$PerformClick.run(view.java:26145)
handleCallback(Handler.java:873)位于
dispatchMessage(Handler.java:99)位于
Looper.loop(Looper.java:193)位于
main(ActivityThread.java:6863)位于
java.lang.reflect.Method.invoke(本机方法)位于
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)}
根据,LayoutInflater.From方法需要一个Android.Content.Context对象。因此,假设您的片段是从Android.App.fragment继承的,这与您的片段有关,而不是您的应用程序上下文
LayoutInflater layoutinflater = LayoutInflater.From(this);
您应该使用LayoutInflater LayoutInflater=LayoutInflater.From(活动)代码>
和Android.Support.V7.App.AlertDialog.Builder项目名称对话框=新的Android.Support.V7.App.AlertDialog.Builder(活动)代码>
这是我的片段代码。(不要忘记添加projectnamedilog.Show();
弹出AlertDialog)
有正在运行的GIF
我不知道Xamarin,但错误消息似乎与View=inflater.Inflate(Resource.Layout.intro\u add\u new\u project,container,false)行有关。似乎充气机.Inflate方法需要一个Android.Content.Context对象。不,错误发生在(this)
单词this
的两行,你想让我回答这个问题还是解决了?还没有解决,我问题的最后一部分是我尝试Leon LuThank You的解决方案时遇到的错误,但我仍然在这一行中得到一个错误:projectnamedilog.Show()代码>。。。。我将错误添加到问题的更新部分!你可以分享一个演示吗?@a.Vreeswijk这是我的演示,你可以参考它。你是否使用了Theme.AppCompat主题(或后代)
与此链接类似的活动我现在没有使用Theme.AppCompat,但我如何将其与actionbar一起使用?我已经尝试过:Theme.AppCompat.Light.darkaActionBar
,但在我的代码中我使用了:ActionBar.SetCustomView(Resource.Layout.setup\u nav\u bar)代码>现在它给出了一个错误。。。。我做错了什么?
public class Fragment1 : Fragment
{
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your fragment here
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.activity_main, container, false);
ImageButton btnAddProject = view.FindViewById<ImageButton>(Resource.Id.btnAddProject);
btnAddProject.Click += delegate
{
LayoutInflater layoutinflater = LayoutInflater.From(Activity);
View DialogView = layoutinflater.Inflate(Resource.Layout.setup_project_name_dialog, null);
Android.Support.V7.App.AlertDialog.Builder ProjectNameDialog = new Android.Support.V7.App.AlertDialog.Builder(Activity);
ProjectNameDialog.SetView(DialogView);
EditText editProjectName = DialogView.FindViewById<EditText>(Resource.Id.et_name);
ProjectNameDialog.SetCancelable(false);
ProjectNameDialog.SetPositiveButton("Continue", delegate
{
//My own code here
});
ProjectNameDialog.Show();
};
return view;
}
}
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.main);
var Fragment1 = new Fragment1();
FragmentManager.BeginTransaction()
.Add(Android.Resource.Id.Content, Fragment1)
.Commit();
}
}