Android: можно добавить фрагмент в видоискатель? - PullRequest
1 голос
/ 23 ноября 2011

Работая над каким-то кодом, я оказался в затруднительном положении.

У меня есть фрагменты для отображения различных страниц моего приложения.У меня был фрагмент поиска и фрагмент параметров, которые я хочу взаимодействовать друг с другом.Возможно ли иметь фрагмент, к которому можно получить обычный доступ, и получить к нему доступ, используя видоискатель?

Фрагмент опций имеет видоискатель, который позволяет мне отображать различные меню, связанные с ним.Однако мне нужно иметь возможность получить доступ к функции поиска через видоискатель во фрагменте параметров, а также получить доступ к нему как к обычному фрагменту (не одновременно, но к нему можно получить доступ либо с помощью фрагмента на вкладке).bar или из видоискателя в параметрах Fragment).

До сих пор я использовал следующий код для активации изменения вида viewflipper:

    public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
                        if(moreViewFlipper.getChildAt(1) != null)//Check if any previously checked views
                        {
                            moreViewFlipper.removeViewAt(1);
                        }
                        switch(pos){
                        case 0: // Profile
                            moreViewFlipper.addView(createProfileView(ctx), 1);
                            moreViewFlipper.setInAnimation(SlideAnimation.inFromRightAnimation());
                            moreViewFlipper.setOutAnimation(SlideAnimation.outToLeftAnimation());
                            moreViewFlipper.setDisplayedChild(1);
                            break;
...

Возможно ли использовать код выше (добавить фрагмент фрагмента как дочерний элемент к moreViewFlipper? Буду признателен, если кто-нибудь сможет мне помочь с этим.


РЕДАКТИРОВАТЬ: друг очень любезно удалось указать, как я мог сделать это после некоторых экспериментовПо-видимому, можно поместить фрагмент внутри представления, если вы поместите его в файл xml, содержащий представление, к которому вы хотите добавить фрагмент.

В этом случае я создал новый xmlфайл и поместил фрагмент внутри Linearview с помощью кнопки назад. Я использовал приведенный выше код для вызова функции, котораяТед вид и принес его в видоискатель и воала!он работает до тех пор, пока у вас есть другой идентификатор для вашего фрагмента, чем для исходного (если это случай, подобный моему, вызываемый в 2 случаях).

Опять же, извините за трату времени людей, но спасибо за вашу доброту.

1 Ответ

0 голосов
/ 30 сентября 2012

Извините за поздний ответ. Но может быть у кого-то еще есть похожая проблема.

Вы можете комбинировать ViewFlipper и Fragments, если вы используете ViewPager. Поместите ViewPager -node в ViewFlipper -node в main_layout.xml. Панель действий по-прежнему будет оставаться на своем месте, и вы сможете легко переходить к другому виду и назад.

Если вы хотите обработать аппаратную кнопку «назад», добавьте что-то подобное в ваш основной фрагмент:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if(keyCode == KeyEvent.KEYCODE_BACK)
    {
        if(this.vf.getCurrentView() != this.findViewById(R.id.pager))     //vf is a ViewFlipper's instance
        {
            this.vf.showPrevious();
            return true;
        }
    }

    return super.onKeyDown(keyCode, event);
}
...