标签栏:点击进入主屏幕

时间:2012-11-19 09:46:54

标签: android android-intent tabbar multiscreen

我正在使用标签栏。我在每个标签中有三个以上的屏幕,当我按下所选标签的标签按钮时,它应该转到该标签的第一个屏幕,但它不会出现。
这是我的tabar代码。

public class TabUi extends TabActivity {
    private static final String TAG_DEALS = "DEAL";
    private static final String TAG_SEARCH = "SEARCH";
    private static final String TAG_BOOKMARKS = "ALERTS";
    private static final String TAG_FRIENDS = "BUZZ";
    private static final String TAG_MORE = "MORE";
    /*
     * private static final String TAG_DEALS = ""; private static final String
     * TAG_SEARCH = ""; private static final String TAG_BOOKMARKS = ""; private
     * static final String TAG_FRIENDS = ""; private static final String
     * TAG_MORE ="";
     */
    protected LocationManager locationManager;
    Location location;
    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in
                                                                        // Meters
    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in
                                                                    // Milliseconds

    // private TabHost host = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Resources res = getResources();

        TabHost tabHost = getTabHost();

        TabHost.TabSpec spec;

        Intent intent;

        intent = new Intent().setClass(this, DealsActivityGroup.class);
        spec = tabHost.newTabSpec(TAG_DEALS)
                .setIndicator(TAG_DEALS, res.getDrawable(R.drawable.deal_icon))
                .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, SearchActivityGroup.class);
        spec = tabHost
                .newTabSpec(TAG_SEARCH)
                .setIndicator(TAG_SEARCH,
                        res.getDrawable(R.drawable.search_icon))
                .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, BookmarksActivityGroup.class);
        spec = tabHost
                .newTabSpec(TAG_BOOKMARKS)
                .setIndicator(TAG_BOOKMARKS,
                        res.getDrawable(R.drawable.bookmark_icon))
                .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, FriendsActivityGroup.class);
        spec = tabHost
                .newTabSpec(TAG_FRIENDS)
                .setIndicator(TAG_FRIENDS,
                        res.getDrawable(R.drawable.friend_icon))
                .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, MoreActivity.class);
        spec = tabHost.newTabSpec(TAG_MORE)
                .setIndicator(TAG_MORE, res.getDrawable(R.drawable.more_icon))
                .setContent(intent);
        tabHost.addTab(spec);
    }

    /*@Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

    }*/

}

这是标签活动组的代码:

public class DealsActivityGroup extends ActivityGroup {

    public static DealsActivityGroup group;
    private ArrayList<View> history;
    private ProgressDialog pDialog;
    String Url;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.history = new ArrayList<View>();
        group = this;

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        // new DealsFirst().execute();
        View view = getLocalActivityManager().startActivity(
                "Dealsfirstactivity",
                new Intent(DealsActivityGroup.this, Dealsfirstactivity.class)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                .getDecorView();

        replaceView(view);
    }

    public void replaceView(View v) {
        // Adds the old one to history
        history.add(v);
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        v.requestFocus();

        // Changes this Groups View to the new View.
        setContentView(v);
    }

    public void back() {

        System.out.println("History size: " + history.size());
        if (history.size() > 1) {
            history.remove(history.size() - 1);
            View v = history.get(history.size() - 1);
            System.out.println("If size: " + history.size());
            v.setFocusable(true);
            v.setFocusableInTouchMode(true);
            v.requestFocus();
            System.out.println("View : " + v);
            setContentView(v);

        } else
            // System.out.println("History size: "+ history.size());
            this.finish();
    }

    @Override
    public void onBackPressed() {
        DealsActivityGroup.group.back();
        return;
    }

    public class DealsFirst extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // pDialog = new ProgressDialog(Dealsfirstactivity.this);
            // pDialog.setMessage("Please wait!..");
            // pDialog.setIndeterminate(false);
            // pDialog.setCancelable(true);
            // pDialog.show();
        }

        protected String doInBackground(String... args) {
            if (StorageManager.Instance().GetdealscategoryData() == null) {
                ServiceHelper.Instance().Dealscategorylist();
            }
            return null;

        }

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String result) {
            // dismiss the dialog once done
            super.onPostExecute(result);

            if (StorageManager.Instance().GetdealscategoryData() != null
                    && StorageManager.Instance().GetdealscategoryData().size() > 0) {
                new Dealslistfirst().execute();

            }
        }

    }

        public class Dealslistfirst extends AsyncTask<String, String, String> {

            /**
             * Before starting background thread Show Progress Dialog
             * */
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(getDialogContext());
                pDialog.setMessage("Please wait!..");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(true);
                pDialog.show();
            }

            protected String doInBackground(String... args) {

                ServiceHelper.Instance().dealsforyoulist(Url);
                return null;

            }

            /**
             * After completing background task Dismiss the progress dialog
             * **/
            protected void onPostExecute(String result) {
                // dismiss the dialog once done
                super.onPostExecute(result);

                if (StorageManager.Instance().GetdealsData() != null
                        && StorageManager.Instance().GetdealsData().size() > 0) {

                    // runOnUiThread(action)

                } else if (StorageManager.Instance().GetdealsData() == null) {

                }
                if (pDialog.isShowing()) {
                    pDialog.dismiss();
                }

                View view = getLocalActivityManager().startActivity(
                        "Dealsfirstactivity",
                        new Intent(DealsActivityGroup.this,
                                Dealsfirstactivity.class)
                                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                        .getDecorView();

                replaceView(view);
            }

        }

        private Context getDialogContext() {
            Context context;
            if (getParent() != null)
                context = getParent();
            else
                context = this;
            return context;
        }
    }

2 个答案:

答案 0 :(得分:1)

TabActivity 可以在您切换标签时进行识别(从一个标签更改为另一个标签页),但如果您选择当前标签页则无法识别。

  

我正在使用标签栏。我在每个标签中有三个以上的屏幕   当我按下所选标签的标签按钮时,它应该先到   该标签的屏幕,但它没有。

为此,您需要在TabActivity中实现 onTouchListener

请为您提供此链接。 get notified when current tab is selected

答案 1 :(得分:0)

在您的根活动意图中放置“FLAG_ACTIVITY_CLEAR_TOP”标志

Intent intent;

        intent = new Intent().setClass(this, DealsActivityGroup.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        spec = tabHost.newTabSpec(TAG_DEALS)
                .setIndicator(TAG_DEALS, res.getDrawable(R.drawable.deal_icon))
                .setContent(intent);
        tabHost.addTab(spec);

对所有选项卡的根目标执行相同的操作,在更改选项卡后,您将通过执行此操作获得第一个选项卡屏幕 并且您必须实现tab ontouch侦听器并将此意图置于触摸事件