Как подойти к вкладкам и вкладкам Android - PullRequest
0 голосов
/ 24 ноября 2010

Я хочу создать приложение для Android, которое использует вкладки.

Требования

Когда пользователь выбирает вкладку и возвращается на ту же вкладку, не должно бытьпериод загрузки (желательно).

Каждая вкладка будет содержать просмотр списка.

На одной из вкладок мне придется использовать вложенные вкладки.

И этоit.

Один замечательный пример, который мне действительно понравился (хотя я не пробовал приложение), это http://www.usatoday.com/android/.

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

Два считают, что вам необходимо учесть:

1.) Вложенные вкладки не могут быть реализованы с помощью операций, поскольку ActivityGroup не может обернуть другие ActivityGroup

2.) Вкладки в вкладках ударУровень сложности макета совсем немного.Особенно на устройствах <2.0 вы легко столкнетесь с <code>StackOverflowExceptions.В официальном блоге Android об этом была также запись в блоге, и я обновлю ответ, когда найду его.

[EDIT] Вот и мы: http://android -developers.blogspot.com/2009/04/future-proofing-your-apps.html

Соответствующая часть:

Из-за изменений в инфраструктуре рендеринга View, чрезмерно глубоких (большеболее 10 или более) или широкий (более 30). Вид иерархий в макетах теперь может вызывать сбои.Это всегда было риском для чрезмерно сложных макетов, но вы можете думать, что Android 1.5 лучше, чем 1.1, разоблачает эту проблему.

Учитывая, что каждый вкладка добавляет около 4 уровней глубины, вы скоро достигнете глубины 10 с двойными вкладками.

Имейте в виду, что "использование действий" в качестве вкладокэто просто обман, они просто дополнительные представления в вашей иерархии.

1 голос
/ 24 ноября 2010

Я только что разработал приложение с вкладками и использовал следующую функцию для создания вкладок в коде.Функция использует намерения, которые означают, что когда вы выбираете вкладку, активность загружается в тело вкладки с помощью намерения.Эта функция вызывается в основном действии.

private void SetupTabs()
    {
        TabHost tabHost = getTabHost();


        TabHost.TabSpec spec;  
        Intent intent;  

        //*****************************
        intent = new Intent().setClass(MPaper.this, NewsList.class);        
        spec = tabHost.newTabSpec(NewsTag).setIndicator("News")
                      .setContent(intent);        
        tabHost.addTab(spec);
        //*****************************
        intent = new Intent().setClass(MPaper.this, Search.class);        
        spec = tabHost.newTabSpec(SearchTag).setIndicator("Search")
                      .setContent(intent);        
        tabHost.addTab(spec);
        //****************************
        intent = new Intent().setClass(MPaper.this, MyNewsList.class);        
        spec = tabHost.newTabSpec(MyNewsTag).setIndicator("My News")
                      .setContent(intent);        
        tabHost.addTab(spec);
        //*****************************
        intent = new Intent().setClass(MPaper.this, Extras.class);        
        spec = tabHost.newTabSpec(ExtrasTag).setIndicator("Extras")
                      .setContent(intent);        
        tabHost.addTab(spec);
        //*****************************


        tabHost.setCurrentTabByTag(NewsTag);
    }

Представление списка в NewsList Activity выполняется с помощью XML следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tabhost" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ListView 
        android:id="@+id/NewsList" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        >

    </ListView>

</LinearLayout>

В ответ на комментарий Фабиоса ниже: Да при использованиисвойство видимости или попробуйте реализовать вкладки, используя способ, указанный ниже:

private void TabSetup()
    {
        tabs = (TabHost)findViewById(R.id.tabhost);        
        tabs.setup(); 
        TabHost.TabSpec spec = tabs.newTabSpec("MainNewsTag");
        spec.setContent(R.id.MainNews);
        spec.setIndicator("Home");
        tabs.addTab(spec);




        spec = tabs.newTabSpec("SearchTag");
        spec.setContent(R.id.Search);
        spec.setIndicator("Search");
        tabs.addTab(spec);


        spec = tabs.newTabSpec("MyNewsTag");
        spec.setContent(R.id.MyNews);
        spec.setIndicator("My News");
        tabs.addTab(spec);

        spec = tabs.newTabSpec("ExtrasTag");
        spec.setContent(R.id.MyNews);
        spec.setIndicator("Extras");
        tabs.addTab(spec);
} 

Где файл макета, как показано ниже:

    <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/tabhost" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <RelativeLayout android:layout_height="fill_parent"
            android:layout_width="fill_parent">
            <TableLayout android:layout_height="fill_parent" 
               android:layout_width="fill_parent">
               <TabWidget android:id="@android:id/tabs"
               android:layout_height="wrap_content"
                   android:layout_width="fill_parent" />
               <FrameLayout android:id="@android:id/tabcontent"
                    android:layout_height="wrap_content"
                                android:layout_width="fill_parent" >  
                   <ListView android:id="@+id/MainNews" 
                             android:layout_width="fill_parent"
                             android:layout_height="wrap_content">
                   </ListView>
.... and so on 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...