从Android Xamarin中的ListActivity更改片段

时间:2017-09-27 10:06:08

标签: c# android visual-studio android-fragments xamarin

我在从listActivity对话框中选择项目后尝试更改当前片段

这是我的 listActivity.cs 类:

 [Activity(  Theme = "@android:style/Theme.Dialog" , Label ="Number list") ]
    class NumberListActivity : ListActivity 
    {
        string[] data;
        ArrayAdapter adapter;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            this.data = Intent.GetStringArrayExtra("list_numbers");
            adapter = new ArrayAdapter(this, Resource.Layout.specific_contact_number_list_layout, data);
            ListAdapter = adapter;
        }
        protected override void OnListItemClick(ListView l, View v, int position, long id)
        {
            base.OnListItemClick(l, v, position, id);


            //Intent callFragment = new Intent(this, typeof(barMenu));
            //callFragment.PutExtra("callNumber", data[position]);
            //StartActivity(callFragment);

            ISharedPreferences preferences = GetSharedPreferences(SignInActivity.userSessionPref, FileCreationMode.Private);
            String UserNamevalueSession = preferences.GetString("UserNamevalue", "");
            String UserphonevalueSession = preferences.GetString("Userphonevalue", "");
            CallService.phone.Connect(data[position], UserphonevalueSession);
            DateTime now = DateTime.Now;
            SqliteDB db = new SqliteDB();
            db.Insert(data[position], now.ToString());


            var frag = new MainActivity();
            FragmentManager.BeginTransaction().Replace(Resource.Id.conent_fragment, frag).Commit();
            Finish();
        }
    }

此处的所有内容都非常有效,我只需要在点击项目后更改片段

我试过这个

var frag = new MainActivity();
FragmentManager.BeginTransaction().Replace(Resource.Id.conent_fragment, frag).Commit();

但它给了我

  

09-27 12:57:00.247 E / AndroidRuntime(11446):   java.lang.IllegalArgumentException:找不到id 0x7f080079的视图   (TurkeyanaCall.TurkeyanaCall:id / conent_fragment)片段   MainActivity {4b067018#0 id = 0x7f080079}

我的 specific_contact_number_list_layout.xmal 代码

<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/number_list"
  android:textColor="#37c837"
  android:textSize="20dip"
  android:textStyle="italic"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_marginLeft ="20dp"
  android:padding ="10dp"
          />

这是包含我要更改名称为 bar_menu.xmal

的片段的布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:id="@+id/maintActivity_drawerlayout">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:id="@+id/linearView">
        <fragment
            class="TwilioClientTest.Android.MainMenuFragment"
            android:id="@+id/conent_fragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>
    <android.support.design.widget.NavigationView
        android:id="@+id/maintActivity_navigationView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@drawable/shadow"
        app:menu="@menu/left_menus"
        app:theme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.v4.widget.DrawerLayout>

1 个答案:

答案 0 :(得分:1)

这里出了点问题。

首先,您尝试将活动用作片段。

var frag = new MainActivity();

其次,默认ListActivity为您设置内容视图,其中包含ListView。因此,没有conent_fragment视图。

如果您只想显示MainActivity,可以替换

var frag = new MainActivity();
FragmentManager.BeginTransaction().Replace(Resource.Id.conent_fragment, frag).Commit();

使用

StartActivity(typeof(MainActivity));

如果你真的想要使用片段,你将不得不改变一些事情。如果是这种情况,我可以更新我的答案。

编辑片段

创建名为number_list

的布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/number_list_content"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>
</FrameLayout>

这里重要的是添加标识为ListView的{​​{1}}。这将取代默认值。

然后在android:id="@android:id/list"添加OnCreate

然后当你想要显示片段

SetContentView(Resource.Layout.number_list);