Переключайтесь между макетами с помощью xamarin android - PullRequest
0 голосов
/ 09 июня 2018

Я новичок в xamarin android. Я отказался от форм, и я хочу изменить макет onnavigationselecteditem, и мне было интересно, если кто-то может указать мне правильное направление, я попытался использовать setContentView, но это не изменило вид навсе.

Был создан макет с названием заданий, поэтому я не его не ноль Я хотел бы, чтобы люди перестали отмечать вопросы с общим нулевым статусом, это не так.

 public bool OnNavigationItemSelected(IMenuItem item)
 {
        int id = item.ItemId;

        if (id == Resource.Id.nav_camera)
        {
            // Handle the camera action
        }
        else if (id == Resource.Id.jobs)
        {
            SetContentView(Resource.Layout.jobs);
        }
        else if (id == Resource.Id.nav_assignjob)
        {

        }
        else if (id == Resource.Id.nav_manage)
        {

        }
        else if (id == Resource.Id.nav_share)
        {

        }
        else if (id == Resource.Id.nav_send)
        {

        }

        DrawerLayout drawer = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
        drawer.CloseDrawer(GravityCompat.Start);
        return true;
    }

Время истекло со следующим

Необработанное исключение:

System.NullReferenceException:

В строке drawer.CloseDrawer(GravityCompat.Start); я полагаю, потому что SetContview оставил что-то открытым, но не отобразил это.

1 Ответ

0 голосов
/ 10 июня 2018

Вы должны использовать Fragment, если хотите заменить конкретный макет:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/content_frame">
  <LinearLayout
      android:id="@+id/change_that"
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
  </LinearLayout>
</FrameLayout>

Используя функцию Replace FragmentTransition:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    var view = inflater.Inflate(Resource.Layout.yourLayout, container, false);
    var baseLayout  = view.FindViewById<LinearLayout>(Resource.Id.change_that);
    this.ChangeLayout += (object sender, EventArgs e) =>
    {
        YourFragment newLayout = new YourFragment();
        FragmentTransaction ft = FragmentManager.BeginTransaction();
        ft.Replace(Resource.Id.content_frame, newLayout);
        ft.Commit();
        baseLayout.Visibility = ViewStates.Gone;
    };

    return view;
}

ТогдаВы можете запускать события для изменения макета, независимо от вашей логики на OnNavigationItemSelected.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...