Работа с Tab Control - Mono для Android - PullRequest
0 голосов
/ 31 марта 2012

В моей активности есть следующий элемент управления Tab. Он содержит 2 вкладки.

При нажатии Tab, он должен перейти к новому activity.

Но у меня с этим 2 проблемы.

1.) дает мне IllegalArgumentException, когда используется следующий код:

    TabHost tabHost=(TabHost)FindViewById(Resource.Id.tabHost);
            tabHost.Setup();

    TabHost.TabSpec spec1=tabHost.NewTabSpec("Tab 1");
            spec1.SetContent(Resource.Id.tab1);
            Intent i = new Intent(this, typeof(Activity1));
            spec1.SetContent(i);
            spec1.SetIndicator("Tab 1");

    TabHost.TabSpec spec2=tabHost.NewTabSpec("Tab 2");
            spec2.SetContent(Resource.Id.tab2);
            Intent i = new Intent(this, typeof(Activity2));
            spec2.SetContent(i);
            spec2.SetIndicator("Tab 2");

        tabHost.AddTab(spec1);
        tabHost.AddTab(spec2);

2.) и для демонстрации я попробовал этот простой код:

TabHost tabHost=(TabHost)FindViewById(Resource.Id.tabHost);
 tabHost.Setup(); 

TabHost.TabSpec spec1=tabHost.NewTabSpec("Tab 1");
spec1.SetContent(Resource.Id.tab1);
spec1.SetIndicator("Tab 1");

TabHost.TabSpec spec2=tabHost.NewTabSpec("Tab 2");
spec2.SetContent(Resource.Id.tab2);
spec2.SetIndicator("Tab 2");

tabHost.AddTab(spec1);
tabHost.AddTab(spec2);

Но в этом случае Tab - это , всегда фокусирующийся .

т.е. У меня есть EditText в моей деятельности, и как только я пытаюсь что-то напечатать, фокус переходит на Tab.

Понятия не имею, почему это происходит, какое-либо решение?

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

EDIT

Учитывая предложения, я использовал это:

TabHost.TabSpec spec;     
        Intent intent;

TabHost tabHost=(TabHost)FindViewById(Resource.Id.tabHost);
                tabHost.Setup();

            intent = new Intent (this, typeof (HeatMap));
            intent.AddFlags (ActivityFlags.NewTask);

            spec=tabHost.NewTabSpec("Heat Map");
            spec.SetIndicator("Heat Map");
            spec.SetContent(intent);
            tabHost.AddTab(spec);

            intent = new Intent (this, typeof (LiveMkt));
            intent.AddFlags (ActivityFlags.NewTask);

            spec=tabHost.NewTabSpec("Live Mkt");
            spec.SetIndicator("Live Mkt");
            spec.SetContent(intent);
            tabHost.AddTab(spec);

Но я получил эту ошибку:

 java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?    
android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:649)     
android.widget.TabHost.setCurrentTab(TabHost.java:323)
android.widget.TabHost.addTab(TabHost.java:213)
stockgadget.controls.HeatMap.n_onCreate(Native Method)
stockgadget.controls.HeatMap.onCreate(HeatMap.java:25)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
android.app.ActivityThread.access$2300(ActivityThread.java:125)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:123)

1 Ответ

0 голосов
/ 01 апреля 2012

Я не уверен, в чем проблема для вашего второго примера.

Но в первом примере, я думаю, ваша проблема в том, что вы настраиваете содержимое вкладки дважды - например ::

        spec1.SetContent(Resource.Id.tab1);

и

        spec1.SetContent(i);

Просто установите содержимое один раз - либо на вложенную вкладку, определенную в XML макета, либо на динамически создаваемое действие - не на оба.

Хорошее место для начала - ApiDemo в https://github.com/xamarin/monodroid-samples - например: для вкладок попробуйте https://github.com/xamarin/monodroid-samples/blob/master/ApiDemo/Tutorials/TabLayoutTutorial.cs

    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);
        SetContentView (Resource.Layout.TabLayoutTutorial);

        TabHost.TabSpec spec;     // Resusable TabSpec for each tab  
        Intent intent;            // Reusable Intent for each tab  

        // Create an Intent to launch an Activity for the tab (to be reused)  
        intent = new Intent (this, typeof (ArtistsActivity));
        intent.AddFlags (ActivityFlags.NewTask);

        // Initialize a TabSpec for each tab and add it to the TabHost  
        spec = TabHost.NewTabSpec ("artists");
        spec.SetIndicator ("Artists", Resources.GetDrawable (Resource.Drawable.ic_tab_artists));
        spec.SetContent (intent);
        TabHost.AddTab (spec);

        // Do the same for the other tabs  
        intent = new Intent (this, typeof (AlbumsActivity));
        intent.AddFlags (ActivityFlags.NewTask);

        spec = TabHost.NewTabSpec ("albums");
        spec.SetIndicator ("Albums", Resources.GetDrawable (Resource.Drawable.ic_tab_artists));
        spec.SetContent (intent);
        TabHost.AddTab (spec);

        intent = new Intent (this, typeof (SongsActivity));
        intent.AddFlags (ActivityFlags.NewTask);

        spec = TabHost.NewTabSpec ("songs");
        spec.SetIndicator ("Songs", Resources.GetDrawable (Resource.Drawable.ic_tab_artists));
        spec.SetContent (intent);
        TabHost.AddTab (spec);

        TabHost.CurrentTab = 2;
    }
...