Xamarin Android - 片段控件未显示在活动中

时间:2014-09-06 08:49:24

标签: android android-activity android-fragments xamarin

我正在尝试从片段中调用一个新活动。我在工具栏上有一个按钮,当按下时,以下代码被称为(此事件在片段内)

 Intent secondactitvity = new Intent(this.Activity,typeof(Activity_SecondActivity));
 StartActivity(secondactitvity );

现在正在调用新活动,这是我在新活动的OnCreate内的代码:

RequestWindowFeature(WindowFeatures.ActionBar);
ActionBar.SetIcon(Resource.Drawable.icon_toolbar_back_new);


ActionBar.SetCustomView(Resource.Layout.ActionBar_Custom_Layout);
ActionBar.SetDisplayShowCustomEnabled(true);


base.OnCreate(bundle);

SetContentView(Resource.Layout.SecondActivity_Layout);

以下是SecondActivity_Layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
    android:text="Text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/textView1" />
<fragment
    class="frag.Fragment_Second"
    android:id="@+id/fragment_secondActivity"
    android:paddingTop="10dip"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />
 </LinearLayout>

以下是片段的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<TextView
    android:text="@string/secondFragment_name"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/textView1" />
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editText1"
    android:paddingLeft="10dp" />
</LinearLayout>

以下是片段代码:

 public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle      savedInstanceState)
    {

        return inflater.Inflate(Resource.Layout.Fragment_ProjectDetails, container); //view;// base.OnCreateView(inflater, container, savedInstanceState);

    }

 public override void OnActivityCreated(Bundle savedInstanceState)
    {
        Toast.MakeText(this.Activity, "activity for second fragment created",ToastLength.Short).Show();

        base.OnActivityCreated(savedInstanceState);
    }

现在的问题是。第二个活动仍为空,它没有被片段填充(但没有错误消息)。如果无法找到片段或类似的东西,我会理解它,但在这种情况下,片段(onCreateViewonActivityCreated)中的所有函数都被调用,而Toast是也正在显示,但活动是空的。然后我尝试在第二个活动布局文件中的片段顶部插入一个文本视图,并显示它,但片段中的控件仍然不可见。然后我尝试更改与第二个活动关联的片段,我将其更改为调用活动的片段,并且正确加载了这个(我在.axml文件中更改了它。)

我在这里缺少什么,对我而言,似乎第二个没有被创建属性,因此控件无法显示(但是,我可能也错了)?

谢谢

2 个答案:

答案 0 :(得分:0)

在花了太多时间后,我得到了解决方案。我注意到的第一件事是我无法从第二个片段布局访问视图(当尝试在代码中读取它时我无法编译)。然后我创建了一个新的axml文件,将其指定为第二个片段的布局,并显示控件。 所以对我来说,它似乎是Xamarin中的一个错误,不知何故第一个axml没有相应的注册(但有趣的是我可以访问axml本身,但不能控制)。

我是从Java(Android开发)迁移到Xamarin的人,我对此寄予了很大的希望。但我必须承认,几周之后,第一批热情就消失了。 Xamarin中缺少很多东西,随着时间的流逝,我更想回到Java并开始学习iOS的Objective C.我现在在Xamarin做的这个项目,如果我使用Java,我本来就已经做过了,但是现在我还处于早期阶段(当然它不能像Java一样快,因为我必须google一切,但......)。这些也是资源文件的问题,有时当我的项目中断时我无法阻止它执行,我必须通过任务栏杀死Visual Studio。在大多数情况下,当我这样做时,资源文件被&#34;销毁&#34;当我再次打开项目时,我再也无法启动它了(在大多数情况下,我没有打扰,因为我正在练习,我创建了一个新的,但如果它是一个更大的项目怎么办?) 接下来的事情是当设计器打开时,.axml中缺少IntelliSense(当我使用xml viewer打开它时,我获得了IntelliSense)。我是否必须在这些视图之间切换? 而现在这个片段,如果这些重要的东西不能正常工作,我应该如何信任系统。

由于我还处于试用阶段,我会给这整个事情一个机会,但是,尽管我很难过,但有趣的是#34;使用它正在减少......

很抱歉很长的帖子,但只是需要说:)

答案 1 :(得分:0)

我遇到了同样的问题,我所做的一切都没有解决,包括删除布局并使用不同的名称再次添加布局。

我发现我弄乱了这个方法并忘记了override关键字。在这个修复之后,它工作得很好。