Android: TabActivity, которая выполняет проверку перед заполнением представления контента - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть класс TabActivity, который использует Intents для заполнения представления контента.При определенных условиях я хотел бы перехватить событие выбора вкладки, открыть диалоговое окно сообщения, подавить выбранное намерение и вернуться к выбранной исходной вкладке.

Я хочу, чтобы содержимое TabActivity оставалось управляемым намерением (скореечем с помощью просмотров).

Я подозреваю, что для этого может потребоваться расширение LocalActivityManager.

Кто-нибудь когда-либо делал это или делал что-то похожее?

// simple example of current code:

TabHost tabHost = getTabHost();
TabSpec ts = tabHost.newTabSpec(tag);
ts.setIndicator(tabview);
ts.setContent(new Intent().setClass(this, AHome.class));
tabHost.addTab(ts);

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 февраля 2011

Немного покопавшись в Android TabHost src, вот довольно простое решение проблемы. Это позволяет графически «касаться» кнопки вкладки, но все еще остается невыбранной, и предотвращает любую обработку выбранной вкладки (при условии, что все прослушиватели OnTabSelected были уведомлены).

Просто расширьте класс TabHost:

public class MyTabHost extends TabHost
{
    public MyTabHost(Context context)
    {
        super(context);
    }

    public MyTabHost(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public void setCurrentTab(int index) 
    {
        // e.g. substitute ? with the tab index(s) for which to perform a check.  
        if (index == ?)
        {
            if (/* a block condition exists */)
            {
                // Perform any pre-checking before allowing final tab selection
                Toast.makeText(this.getContext(), "msg", Toast.LENGTH_SHORT).show();
                return;
            }
        }
        super.setCurrentTab(index);
    }
}

И затем измените вашу ссылку с TabHost на MyTabHost в XML, используемом для TabActivity:

<com.hos.MyTabHost 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <LinearLayout    
        android:id="@+id/llTest"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="0dp"
        >

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="0dp" 
        android:layout_gravity="top"
        android:layout_weight="1"
        />

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_gravity="bottom"            
        android:layout_weight="0"
        />

    </LinearLayout>

</com.hos.MyTabHost>

Еще одна вещь, которую следует помнить, это то, что если вы используете TabActivity.getTabHost () в TabActivity, он вернет MyTabHost. e.g.:

MyTabHost mth = (MyTabHost)getTabHost();
0 голосов
/ 04 февраля 2011

Я бы не стал искать в TabActivity ответ (даже сотрудники Google признают, что этот API не работает).Вот что я делаю - в целевой операции я проверю это условие в onCreate, если условие выполнено, продолжите, если нет - активируйте предыдущую операцию

...