gpt4 book ai didi

android - 多个 ListFragment 的 fragment 管理最佳实践

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:44 28 4
gpt4 key购买 nike

我计划在一项 Activity 中包含 3 个 fragment 列表。目标是您从第一个列表中选择谈话选项,然后它会根据您在谈话列表中单击的内容过渡到运行列表,然后在运行列表中,根据您单击的内容将过渡到最终的饮食列表。这应该发生在 fragment 本身(就像我拥有的​​那样)还是调用 Activity 来处理将数据来回传递给 fragment ?

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();
}

}
}

这显然只是一些 fragment ,但您明白了。如果我这样做,我不确定如何将某些参数正确传递给 fragment 。理想情况下,RunFragment 会根据在 TalkFragment 中单击的项目的 ID 知道要显示什么。这些应该通过 Activity 代替吗?

最佳答案

我通常这样做的方式是让 Activity 成为处理 fragment 的交通警察。您的 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()
}
}

关于android - 多个 ListFragment 的 fragment 管理最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141433/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com