我有一个简单的ActionBar,附有3个标签。单击选项卡时,片段会膨胀并显示视图。使用事件触发作为click事件的选项卡。最初,第一个片段是膨胀的,但如果点击则其他片段会响应并膨胀。
如果我将被触发的事件更改为ICommand
,则只会对最后一个片段进行膨胀,然后如果单击第一个选项卡,那么最后一个片段会膨胀。从来没有第二次。
我的代码就是这个
ICommand TabClicked
{
get
{
return new RelayCommand(() =>
{
tab.TabSelected += (object sender, ActionBar.TabEventArgs e) => TabOnTabSelected(sender, e);
});
}
}
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
fragments.Add(new TODFragment());
fragments.Add(new ConditionsFragment());
fragments.Add(new ResultsFragment());
AddTabToActionBar("Time", Resource.Drawable.crucifix_colour);
AddTabToActionBar("Conditions", Resource.Drawable.weather_colour);
AddTabToActionBar("Results", Resource.Drawable.tod_colour);
}
void AddTabToActionBar(string text, int iconResourceId)
{
tab = ActionBar.NewTab().SetTag(text).SetText(text).SetIcon(iconResourceId);
/* uncomment and comment out one of the two below to see the difference in operation */
tab.TabSelected += TabOnTabSelected;
//tab.SetCommand<ActionBar.TabEventArgs>("TabSelected", TabClicked);
ActionBar.AddTab(tab);
}
void TabOnTabSelected(object sender, ActionBar.TabEventArgs tabEventArgs)
{
var tabNo = sender as ActionBar.Tab;
var frag = fragments[tabNo.Position];
tabEventArgs.FragmentTransaction.Replace(Resource.Id.frameLayout1, frag);
}
我在ICommands和Events之间的区别中是否遗漏了一些基本内容,还是其他什么?
我正在使用Xam.Android和MVVMLight
答案 0 :(得分:0)
我找到了答案。当我创建分部类时,我定义了像这样的UI对象(或至少这样的东西)
EditText myEditText;
EditText MyEditText = myEditText ?? (view.FindViewById<EditText>(Resources.Id.myEdit);
这很好,但它确实意味着一旦定义,它就不会被重新定义。
如果UI实际上不会改变,则不成问题,但每次按下操作选项卡时,片段都会刷新。唯一的问题是Id没有改变,因为myEditText不为空。
答案是在UI定义代码中添加一个方法,该方法在主代码中使对象为空,当UI消失时,调用nulling方法。一切都有效