Как показать вкладки в суб-деятельности? - PullRequest
0 голосов
/ 11 декабря 2011

Я делаю приложение, в котором я сделал 5 вкладок на первой вкладке, есть ListView. Когда я щелкаю на любом элементе ListItem, я вызывал другое действие с намерением. Теперь возникает проблема. Как и когда я нажимаю на Listitem, вкладки will Dissapears Как мне показать вкладки на моем SubActivity.

Любая помощь будет признана.

1 Ответ

0 голосов
/ 11 декабря 2011

Это нормальное поведение в Android, не очень хорошее.

Обычно я создаю первое действие на вкладке, выходящее из этого класса

public class TabActivityGroup extends ActivityGroup {
    protected LocalActivityManager manager;
    protected ArrayList<String> mIdList;

    public TabActivityGroup() {
        this(false);
    }

    public TabActivityGroup(boolean single) {
        super(single);
    }

    public void onCreate(Bundle ins) {
        super.onCreate(ins);
        manager = getLocalActivityManager();
        mIdList = new ArrayList<String>();
    }

    public void startChildActivity(String Id, Intent intent) {
        Log.d(this.getClass().getName(), "startChildActivity " + Id + " / " + mIdList.size());
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        Window window = manager.startActivity(Id, intent);
        if (window != null) {
            mIdList.add(Id);
            setContentView(window.getDecorView());
        }
    }

    @Override
    public void finishFromChild(Activity child) {
        Log.d(this.getClass().getName(), "finishFromChild("+child.getClass().getName()+") mIdList.size " + mIdList.size());
        int index = mIdList.size() - 1;
        if (index < 1) {
            finish();
        }else{
            Log.e(getClass().getName(), "destroy " + mIdList.get(index));

            manager.destroyActivity(mIdList.get(index), true);
            mIdList.remove(index);
            index--;
            String lastId = mIdList.get(index);
            Activity previous = manager.getActivity(lastId);

            setContentView(previous.getWindow().getDecorView());
        }   
    }

    /**
     * Overrides the default implementation for KeyEvent.KEYCODE_BACK so that
     * all systems call onBackPressed().
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            goBack();
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }


    public void goBack() {
        Log.d(this.getClass().getName(), "goBACK() : " + mIdList.size());
        int length = mIdList.size();
        if (length > 1) {
            Activity current = manager.getActivity(mIdList.get(length - 1));
            current.finish();
        }else{
            ((MyApplication)getApplication()).systemExit(this);
                    //This just calls to System.exit
        }
    }
}

Затем вы можете создать вкладку, подобную этой

public class TabOne extends TabActivityGroup {

    @Override
    public void onCreate(Bundle b) {
        super.onCreate(b);

        startChildActivity(OneActivity.class.getName(), new Intent(this, OneActivity.class));
    }

Что нужно иметь в виду:

  • Внутри вкладки ничего нет, просто активная вкладка начинается с
    startChildActivity метод. Это, чтобы получить хорошее поведение, когда возвращаясь к первому действию, приложение должно закрыться.

  • Будьте очень осторожны с Context в субактивности, как у вас
    использовать контекст TabActivityGroup. Вы можете сделать это вручную, набрав
    вызов getParent(), или лучше определить метод, который зацикливает вызов getParent() пока не найдете корневого родителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...