2016-11-11 122 views
0

我需要防止ActionBar选项卡根据条件进行切换。 ActionBar.NavigationMode设置为选项卡模式。我发现以下事件可用于每个选项卡 - TabSelectedTabReselectedTabUnselected,但无法阻止从其上下文切换。我也没有看到ActionBar的任何适当的事件。我发现子类TabHost的一些示例性和压倒一切防止Android ActionBar选项卡在Xamarin中切换

公共无效setCurrentTab(INT currentTab);

,但这并没有给出一个线索约动作条方法。 任何与Xamarin或Android相关的想法都会有所帮助。

注意:我想拦截ActionBar的触摸,但是有条件地决定是否应该进一步执行它们。

+0

任何方法来禁用标签或全部行动起来吧? –

+0

@YuriS,请提出一个单独的问题,我将尽力帮助 – Kalitsov

+0

这不是问题。这是建议如何禁用切换,但我不知道是否有可能,不是为什么它是一个评论,而不是一个答案 –

回答

0

我看到这些API已被弃用,但如果您有遗留代码... 不知道这是否会导致屏幕闪烁,但这里是您可以尝试的。

ActionBarTabsActivity

public class ActionBarTabsActivity : Activity 
{ 
    ActionBar.Tab tab1, tab2; 

    async public void UnselectedTab(ActionBar.Tab tab) 
    { 
     if (tab == tab2) 
     { 
      await Task.Run(() => 
      { 
       RunOnUiThread(() => { ActionBar.SelectTab(tab); }); 
      }); 
     } 
    } 

    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     SetContentView(Resource.Layout.ActionBarTabsLayout); 
     setupTabs(); 
    } 

    private void setupTabs() 
    { 
     ActionBar.NavigationMode = ActionBarNavigationMode.Tabs; 
     ActionBar.SetDisplayShowTitleEnabled(true); 

     tab1 = ActionBar 
      .NewTab() 
      .SetText("First") 
      //.SetIcon(R.drawable.ic_home) 
      .SetTabListener(new ActionBarFragment1(this)); 

    ActionBar.AddTab(tab1); 
    ActionBar.SelectTab(tab1); 

     tab2 = ActionBar 
     .NewTab() 
     .SetText("Second") 
     //.setIcon(R.drawable.ic_mentions) 
      .SetTabListener(new ActionBarFragment1(this)); 

     ActionBar.AddTab(tab2); 
    } 
} 

ActionBarFragment1

public class ActionBarFragment1 : Fragment, ITabListener 
{ 
    ActionBarTabsActivity parent; 

    public ActionBarFragment1(ActionBarTabsActivity parent) 
    { 
     this.parent = parent; 
    } 
    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.ActionBarFragmentLayout1, container, false); 

    } 

    public void OnTabReselected(Tab tab, FragmentTransaction ft) 
    { 
     //throw new NotImplementedException(); 
    } 

    public void OnTabSelected(Tab tab, FragmentTransaction ft) 
    { 
     //throw new NotImplementedException(); 
    } 

    public void OnTabUnselected(Tab tab, FragmentTransaction ft) 
    { 
     parent.UnselectedTab(tab); 
    } 
} 
+0

@Kalitsov对此有帮助吗? –

+0

对不起,迟到的回应。这对我不起作用。它不会阻止导航,但会重新选择所需的选项卡。这导致UI闪烁。不管怎么说,还是要谢谢你! – Kalitsov

相关问题