【问题标题】:Cannot open fragment from another fragment - No view found for id 0x7f0e0084无法从另一个片段打开片段 - 未找到 id 0x7f0e0084 的视图
【发布时间】:2017-07-18 05:58:16
【问题描述】:

如何从另一个片段打开片段? 当我尝试从另一个 ShowNotes 片段打开 EditNote 片段时,我收到此错误。

No view found for id 0x7f0e0084 (com.example.lalala.notepad:id/container_frame_layout) for fragment EditNote{3005d06 #1 id=0x7f0e0084}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1293)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)

ShowNotes.java 是我要从中打开另一个片段的片段

public class ShowNotes extends Fragment {
private ListView lv;
ArrayList<Note> arrayList;
private View view;
ArrayAdapter<String> adapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.activity_show_notes, container, false);
    arrayList = new ArrayList<>();
    Note n = new Note("Example", "It's just an example");

    arrayList.add(n);

    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    NoteAdapter adapter = new NoteAdapter(view.getContext(), arrayList);
    lv = (ListView) getView().findViewById(R.id.notes_listview);
    lv.setAdapter(adapter);


    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {


        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            EditNote fragment2=new EditNote();
            FragmentManager fragmentManager=getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container_frame_layout,fragment2);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
        }
    });
}}

EditNote.java 现在几乎是一个空片段,它只是让视图膨胀。

public class EditNote extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.activity_edit_note, container, false);
    return view;
}}

activity_edit_note.xml 包含我想将视图膨胀到其中的框架布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
    android:id="@+id/container_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>
</FrameLayout>

【问题讨论】:

  • Cannot open fragment from another fragment。我认为您应该再次阅读错误消息。

标签: java android android-fragments view fragment


【解决方案1】:

您使用的是 getSupportFragmentManager 而不是 getFragmentManager()

尝试更改这些行

EditNote fragment2=new EditNote();
FragmentManager fragmentManager=getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container_frame_layout,fragment2);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

 EditNote fragment2=new EditNote();
     this.getFragmentManager().beginTransaction()
     .replace(R.id.container_frame_layout, fragment2,TAG_FRAGMENT)
     .addToBackStack(null)
     .commit();

【讨论】:

    【解决方案2】:

    您必须先启动 viewPager,然后才能在 Fragment Transaction 中使用它。

    ViewPager pager = (ViewPager) findViewById(R.id.container_frame_layout, fragment2);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多