Рекомендации по управлению фрагментами для нескольких списков фрагментов - PullRequest
4 голосов
/ 04 февраля 2012

Я планирую разместить 3 фрагмента в одном упражнении. Цель состоит в том, чтобы выбрать опцию разговора из первого списка, затем она переходит к списку прогонов на основе того, что вы щелкнули в списке разговоров, а затем в списке прогонов на основе того, что вы щелкнули, он перейдет в окончательный список. Должно ли это происходить в самих фрагментах (как у меня) или вызывать операцию для обработки передачи данных туда и обратно во фрагменты?

public class OptionsActivity extends Activity {

    protected TalkFragment talk;
    protected RunFragment run;
    protected EatFragment eat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        talk = new TalkFragment();
        run = new RunFragment();
        eat = new EatFragment();
    } 
}


public class TalkFragment extends ListFragment {
    private Cursor mCursor;
    int mCurCheckPosition = 0;

    @Override
    public void onActivityCreated(Bundle savedState) {
        super.onActivityCreated(savedState);

    }
    @Override
    public void onListItemClick(ListView l, View v, int pos, long id) {
        mCurCheckPosition = pos;
        // We can display everything in-place with fragments.
        // Have the list highlight this item and show the data.
        getListView().setItemChecked(pos, true);

        // Check what fragment is shown, replace if needed.
        RunFragment run_frag = (RunFragment) getFragmentManager().findFragmentById(R.id.fragment_run);
        if (run_frag == null || run_frag.getShownIndex() != pos) {
            run_frag = RunFragment.newInstance(pos);
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.replace(R.id.details, details);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            ft.commit();
        }

    } 
}

Это, очевидно, просто фрагменты, но вы поняли. Если я делаю это таким образом, я не совсем уверен, как правильно передать определенные параметры для фрагментации. В идеале RunFragment должен знать, что отображать, основываясь на идентификаторе элемента, на который щелкнули в TalkFragment. Должны ли они проходить через активность вместо?

1 Ответ

2 голосов
/ 11 февраля 2012

Обычно я делаю так, чтобы Activity была гаишником для обработки фрагментов. Ваша реализация onListItemClick может просто сообщить Activity, что она хочет делать:

public class OptionsActivity extends Activity {

    protected TalkFragment talk;
    protected RunFragment run;
    protected EatFragment eat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        talk = new TalkFragment();
        run = new RunFragment();
        eat = new EatFragment();
    }

    public void showRunFragment() {
        showFragment(R.id.fragment_run);
    }

    public void showEatFragment() {
        showFragment(R.id.fragment_eat);
    }

    public void showFragment(int fragmentId) {
        // Check what fragment is shown, replace if needed.

        ...
    }
}


public class TalkFragment extends ListFragment {
    private Cursor mCursor;
    int mCurCheckPosition = 0;

    @Override
    public void onActivityCreated(Bundle savedState) {
        super.onActivityCreated(savedState);

    }

    @Override
    public void onListItemClick(ListView l, View v, int pos, long id) {
        mCurCheckPosition = pos;
        // We can display everything in-place with fragments.
        // Have the list highlight this item and show the data.
        getListView().setItemChecked(pos, true);

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