我刚开始使用Xamarin编写Android平台的第一个应用程序。 从自定义工具栏开始,我最终没有在菜单项上进行导航的线索。
当我的应用程序启动时,自定义工具栏正在显示我的自定义菜单项。到现在为止还挺好。当我点击menuitem时,内容需要切换到另一个视图。
我创建了一个类,让我们称之为“设置”,这是从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);
}
单击menuitem时,正在加载值,但没有工具栏。我没有可点击的“后退按钮”。
我有哪些选择来实现这些功能?
您是否需要我的案例的其他信息?
答案 0 :(得分:0)
如果我正确理解了您的问题,您在操作栏上有一个菜单列表,并且您想要选择要导航到不同页面的项目。然后,您需要在每个Toolbar
中设置Activity
,以便在每项活动中应用Toolbar
。
另一种解决此问题的常见方法是,您可以在Fragment
中使用FrameLayout
或MainActivity
,并在此Fragment
/ {{1 }}。例如:
主要布局:
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);
}