4

私は認めるよりも長い間、この問題を解決しようとしてきました。onClicklistenerユーザーがそのタブにいて、タブをクリックしてもタブがリロードされるように、自分のタブに を設定しようとしています。誰かが私のエラーを指摘してください。以下は、スタックオーバーフローの例から作成された、私が使用しているコードです。これまでありがとう! を使用してgetTabHost().setCurrentTab(3)、タブ 3 でのみ実行されるように設定していますが、ユーザーがクリックした特定のタブを呼び出すにはどうすればよいですか?

私はこれを参照として使用しています:タブのOnClickListenerが機能しない

public class DamTabs extends TabActivity implements OnClickListener{
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Resources res = getResources(); // Resource object to get Drawables
    TabHost tabHost = getTabHost(); // The activity TabHost


    Intent intent = new Intent(this, Featured.class);
    tabHost.addTab(tabHost.newTabSpec("Tab 1")
            .setIndicator("Featured", res.getDrawable(R.drawable.ic_tab_main))
            .setContent(intent));

    Intent intent2 = new Intent(this, Deals.class);
    tabHost.addTab(tabHost.newTabSpec("Tab 2")
            .setIndicator("Deals", res.getDrawable(R.drawable.ic_tab_setup))
            .setContent(intent2));

    Intent intent3 = new Intent(this, Events.class);
    tabHost.addTab(tabHost.newTabSpec("Tab 3")
            .setIndicator("Events", res.getDrawable(R.drawable.ic_tab_setup))
            .setContent(intent3));

    getTabWidget().getChildAt(3).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (getTabHost().getCurrentTabTag().equals(sort)) {
                getTabHost().setCurrentTab(3);
            }
        }
    });

} //End of onCreate
4

2 に答える 2

7

私があなたの問題を理解したなら、メソッドを使うべきだと思いますsetOnTabChangedListener()。このようなもの:

mTabHost.setOnTabChangedListener(new OnTabChangeListener() {

        public void onTabChanged(String tabId) {
            Log.d(debugTag, "onTabChanged: tab number=" + mTabHost.getCurrentTab());

            switch (mTabHost.getCurrentTab()) {
            case 0:
                //do what you want when tab 0 is selected
                break;
            case 1:
                //do what you want when tab 1 is selected
                break;
            case 2:
                //do what you want when tab 2 is selected
                break;

            default:

                break;
            }
        }
    });

を削除しimplements OnClickListenerます。

于 2012-05-16T23:41:57.733 に答える
1
getTabWidget().getChildAt(3).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (getTabHost().getCurrentTabTag().equals(sort)) {
            Events.reloadMe()
        }
    }
});

リロードするアクティビティに静的メソッドを作成し、このように呼び出します。これが最も簡単に解決できる方法だと思います。これを使用するには、アクティビティにいくつかのプライベートな静的変数が必要です。そして、これらのプライベートな静的オブジェクトが null でないことを確認してください。

于 2012-05-16T22:51:27.880 に答える