2

次の方法を使用して、タブがクリックされたかどうかを確認しました。

tabHost.setOnTabChangedListener(new OnTabChangeListener() {

            public void onTabChanged(String tabId) {
                int i = tabHost.getCurrentTab();

                if (i == 2) {
                    Log.i("Tab Number", "=" + i);
                    testFields(); // Verifies that the data fields were filled.
                }
            }
        });

フィールドが正しいかどうかを確認するとき、「if or else」というテストがあります。

すべてが完了したら、OK !

そうでない場合は、次のタブに進むことができません。入力を完了するには、タブ「データ」を保持する必要があります。

タブの変更をブロックする方法は? すべてが正しくなるまで?

テストが役立つことを示すために編集

final TabHost tabHost = (TabHost) getParent().findViewById(
                android.R.id.tabhost);
        // ONCLICK TABHOST
        for (int i = 0; i < tabHost.getTabWidget().getTabCount(); i++) {
            tabHost.getChildAt(i).setOnTouchListener(new OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    int action = event.getAction();

                    if (action == MotionEvent.ACTION_UP) {
                        String currentTabTag = (String) tabHost
                                .getCurrentTabTag();
                        String clickedTabTag = (String) v.getTag();

                        if ((etCargac.getText().toString().equals(""))
                                || (tsoloSelecionadac.equals("Selecione"))) {
                            return false; // allows tab change
                        }
                        return true; // doesnt allow tab change
                    }
                    return false;
                }
            });
        }

私がやろうとしているこのイベントは別のクラスにあります。タブホストのクラスにはありません。getParent() を使用する必要がありますね。

私が行う必要があるテストは、フィールド「tab1 data」が入力されているかどうかを確認することです。

何も完了していない場合は、「tab3 results」に切り替えるべきではありません

4

1 に答える 1

5

各タブで OnTouchListener を使用すると、タブの変更を簡単に防ぐことができます。

    for (int i=0; i<tabWidget.getTabCount(); i++) {
        tabWidget.getChildAt(i).setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                int action = event.getAction();

                if (action == MotionEvent.ACTION_UP) {
                    String currentTabTag = (String) tabHost.getCurrentTabTag();
                    String clickedTabTag = (String) view.getTag();

                    testFields();

                    if (!fieldAreCorrect) {
                        return true; // does not allow tab change
                    }
                }
                return false; // allows tab change
            }               
        });
    }
于 2012-04-17T13:28:39.287 に答える