Как открыть много просмотров под одной вкладкой в ​​Android? - PullRequest
1 голос
/ 02 марта 2012

Я хочу открыть много просмотров под одной вкладкой в ​​Android. Другими словами, у меня есть хост вкладок, содержащий много вкладок. Одна из этих вкладок имеет представление списка в качестве содержимого. При нажатии элемента списка я хочу, чтобы он открыл новый вид на той же вкладке. Я провел небольшое исследование Google и обнаружил, что должен использовать фрагмент Android, но я не уверен в этом. Считаете ли вы, что использование фрагмента является лучшим решением или у вас есть какие-либо другие идеи? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Fragment и FragmentManager - рекомендуемый путь вперед, начиная с Honeycomb. Вы захотите использовать библиотеку совместимости (http://developer.android.com/sdk/compatibility-library.html), если вы собираетесь использовать Gingerbread или более ранние устройства.

Вы заметите, что ActivityGroup устарела. Это не значит, что вы не можете использовать его сейчас, но в какой-то момент вы все равно будете вынуждены мигрировать, так что вы можете начать прямо сейчас.

0 голосов
/ 02 марта 2012

Используйте класс ActivityGroup с ViewAnimator и получите правильную активность по ID.

public class YourActivity extends ActivityGroup {

    private Stack<String> ids;
    private LocalActivityManager activityManager;
    private ViewAnimator animator;
    private int serial;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.group);
        ids = new Stack<String>();
        animator = (ViewAnimator) findViewById(R.id.animator);
        activityManager = getLocalActivityManager();
    }

    @Override
    public void startActivity(final Intent intent) {
        String id = "id" + serial++;
        ids.push(id);
        View view = activityManager.startActivity(id, intent).getDecorView();
        animator.addView(view);
        animator.setDisplayedChild(ids.size() - 1);
    }

    @Override
    public boolean onKeyDown(final int keyCode, final KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            int size = ids.size();
            if (size > 0) {
                String topId = ids.pop();
                View view = activityManager.destroyActivity(topId, true).getDecorView();
                animator.removeView(view);

                if (size > 1) {
                    topId = ids.get(size - 2);
                    if (activityManager.getActivity(topId) instanceof ClassA) {
                        ((ClassA) activityManager.getActivity(topId)).onResume();
                    } else if (activityManager.getActivity(topId) instanceof ClassB) {
                        ((ClassB) activityManager.getActivity(topId)).onResume();
                    }
                    return true;
                }
            }
        }
        return super.onKeyDown(keyCode, event);
    }
}
...