每次使用NavigationDrawer

时间:2017-04-16 18:59:05

标签: android listview android-fragments

我有一个带有6个碎片的导航抽屉。其中一个应该包含ListView。我让它工作,我可以通过导航抽屉切换所有碎片。当我按下包含ListView的那个时,我可以看到它,就像它应该的那样。但是,当我进入相同的片段(包含ListView)时,我已经在其中,ListView不再显示。这可能是因为我在Fragment中的onActivityCreated()方法上设置了ListView。我现在很好奇,当我再次按下相同的碎片时会发生什么。活动是否保持加载且片段需要再次膨胀,并且OnActivityCreated()方法不会被再次调用?如果是这样,我该怎么做才能再次显示ListView?

我的Fragment.class目前看起来像这样:

public class FahrplanFragment extends Fragment {

private ListView listView;
private Resources res;
private String[] plans;
private ArrayAdapter<String> adapter;

public FahrplanFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_fahrplan, container, false);
}

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

    listView = (ListView) getActivity().findViewById(R.id.listview_fahrplan);
    res = getResources();
    plans = res.getStringArray(R.array.plans);
    adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,
            android.R.id.text1, plans);
    listView.setAdapter(adapter);
}
}

1 个答案:

答案 0 :(得分:0)

documentation

一样
  

在创建片段活动时调用此方法   片段的视图层次结构实例化。它可以用来做最后的   这些部分就位后进行初始化,例如检索   观点或恢复状态。 [..]这被称为   onCreateView(LayoutInflater,ViewGroup,Bundle)和之前   onViewStateRestored(束)。

每次调用。您可以通过记录事件来检查。

点击导航抽屉按钮时,您是否可以发布事件处理代码?

编辑1

Here我重新创建了你的项目来测试它并且它有效。每次使用列表视图加载片段。此外,它会在事件发生时显示事件,并清楚地显示每次更换片段时都会调用onActivityCreated

我在这里给出的最佳建议是在代码的各个步骤中使用Log.d()System.out.println("...")来记录代码,或者甚至通过设置断点并检查代码来更好地进入调试模式运行以了解何时进入某些方法,何时不进入。