1

タブバーを使用しています。各タブに3つ以上の画面があり、選択したタブのタブボタンを押すと、そのタブの最初の画面に移動するはずですが、移動しません。
これが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;
        }
    }
4

2 に答える 2

1

TabActivityは、タブを切り替える (あるタブから別のタブに変更する) ときに識別できますが、現在のタブを選択しているかどうかは識別できません。

タブバーで作業しています。各タブに3つ以上の画面があり、選択したタブのタブボタンを押すと、そのタブの最初の画面に移動するはずですが、移動しません。

そのためには、 TabActivityに onTouchListener を実装する必要があります。

問題については、このリンクを参照してください。 現在のタブが選択されたときに通知を受け取る

于 2013-01-03T07:57:35.153 に答える
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);

タブのすべてのルートインテントに対して同じことを行い、タブを変更した後、これを行うことでタブの最初の画面が表示され、タブオンタッチリスナーを実装し、このインテントをタッチイベントに配置する必要があります

于 2013-01-10T05:39:14.710 に答える