通过菜单项自定义工具栏导航到其他活动
Custom toolbar navigation via menuitems to other activities
我刚刚开始使用 Xamarin 为 android 平台编写第一个应用程序。
从自定义工具栏开始,我最终对菜单项的导航目的一无所知。
当我的应用程序启动时,自定义工具栏与我的自定义菜单项一起显示。到目前为止,一切都很好。当我点击一个菜单项时,内容需要切换到另一个视图。
我创建了一个 class,我们称它为 "Settings",它被 ListActivity 剥夺了。
public class UserSettingsActivity : ListActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
ListViewSetup();
}
private void ListViewSetup()
{
string[] actions = new string[] { "Add", "Modify", "Delete" };
IListAdapter adapter = new ChangeSettingsAdapter(this, actions);
}
}
据我了解,使用 ListActivity 我不需要创建单独的布局。我的适配器完成其余工作以按预期显示正确的值。
现在是我不知道的部分。
public override bool OnOptionsItemSelected(IMenuItem item)
{
Intent intent = new Intent(this, typeof(UserSettingsActivity));
StartActivity(intent);
return base.OnOptionsItemSelected(item);
}
单击菜单项时,正在加载值,但没有工具栏。我没有可点击的 "back-button".
实现这些功能我有哪些选择?
您需要我的案例的更多信息吗?
如果我正确理解了你的问题,你的操作栏上有一个菜单列表,你想 select 将该项目导航到不同的页面。然后您需要在每个 Activity
中设置您的 Toolbar
,以使 Toolbar
应用于每个活动。
或者另一种解决此问题的常用方法是,您可以在 MainActivity
中使用 Fragment
或 FrameLayout
并在此 Fragment
/ FrameLayout
。例如:
主要布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<FrameLayout
android:id="@+id/myframe"
android:layout_height="match_parent"
android:layout_width="match_parent" />
</LinearLayout>
后面的代码:
public override bool OnOptionsItemSelected(IMenuItem item)
{
Toast.MakeText(this, "Action selected: " + item.TitleFormatted,
ToastLength.Short).Show();
//if (item.TitleFormatted.ToString() == "Edit")
// StartActivity(typeof(Edit_Activity));
//else if (item.TitleFormatted.ToString() == "Save")
// StartActivity(typeof(Save_Activity));
if (item.TitleFormatted.ToString() == "Edit")
{
var newFragment = new Edit_Fragment();
var ft = FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.myframe, newFragment);
ft.Commit();
}
else if (item.TitleFormatted.ToString() == "Save")
{
var newFragment = new Save_Fragment();
var ft = FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.myframe, newFragment);
ft.Commit();
}
return base.OnOptionsItemSelected(item);
}
这样做,您需要将您的休息活动修改为片段,例如:
public class Edit_Fragment : Fragment
{
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your fragment here
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment
return inflater.Inflate(Resource.Layout.edit, container, false);
}
}
我刚刚开始使用 Xamarin 为 android 平台编写第一个应用程序。 从自定义工具栏开始,我最终对菜单项的导航目的一无所知。
当我的应用程序启动时,自定义工具栏与我的自定义菜单项一起显示。到目前为止,一切都很好。当我点击一个菜单项时,内容需要切换到另一个视图。
我创建了一个 class,我们称它为 "Settings",它被 ListActivity 剥夺了。
public class UserSettingsActivity : ListActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
ListViewSetup();
}
private void ListViewSetup()
{
string[] actions = new string[] { "Add", "Modify", "Delete" };
IListAdapter adapter = new ChangeSettingsAdapter(this, actions);
}
}
据我了解,使用 ListActivity 我不需要创建单独的布局。我的适配器完成其余工作以按预期显示正确的值。
现在是我不知道的部分。
public override bool OnOptionsItemSelected(IMenuItem item)
{
Intent intent = new Intent(this, typeof(UserSettingsActivity));
StartActivity(intent);
return base.OnOptionsItemSelected(item);
}
单击菜单项时,正在加载值,但没有工具栏。我没有可点击的 "back-button".
实现这些功能我有哪些选择?
您需要我的案例的更多信息吗?
如果我正确理解了你的问题,你的操作栏上有一个菜单列表,你想 select 将该项目导航到不同的页面。然后您需要在每个 Activity
中设置您的 Toolbar
,以使 Toolbar
应用于每个活动。
或者另一种解决此问题的常用方法是,您可以在 MainActivity
中使用 Fragment
或 FrameLayout
并在此 Fragment
/ FrameLayout
。例如:
主要布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<FrameLayout
android:id="@+id/myframe"
android:layout_height="match_parent"
android:layout_width="match_parent" />
</LinearLayout>
后面的代码:
public override bool OnOptionsItemSelected(IMenuItem item)
{
Toast.MakeText(this, "Action selected: " + item.TitleFormatted,
ToastLength.Short).Show();
//if (item.TitleFormatted.ToString() == "Edit")
// StartActivity(typeof(Edit_Activity));
//else if (item.TitleFormatted.ToString() == "Save")
// StartActivity(typeof(Save_Activity));
if (item.TitleFormatted.ToString() == "Edit")
{
var newFragment = new Edit_Fragment();
var ft = FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.myframe, newFragment);
ft.Commit();
}
else if (item.TitleFormatted.ToString() == "Save")
{
var newFragment = new Save_Fragment();
var ft = FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.myframe, newFragment);
ft.Commit();
}
return base.OnOptionsItemSelected(item);
}
这样做,您需要将您的休息活动修改为片段,例如:
public class Edit_Fragment : Fragment
{
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your fragment here
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment
return inflater.Inflate(Resource.Layout.edit, container, false);
}
}