片段不会启动

Posted

技术标签:

【中文标题】片段不会启动【英文标题】:Fragment won't launch 【发布时间】:2017-08-23 19:05:06 【问题描述】:

我有 onclicklistener 可以工作。我正在尝试通过单击列表视图的按钮启动一个新片段。现在,片段没有启动。但是,我们使用的模拟器并没有崩溃,所以如果我们正确理解这一点,它并没有连接到新的片段/XML 页面。

  public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l)

    myBadData.setId(i);
    Fragment fr = new event_description();
    //fr.setArguments(bundle);
    FragmentManager fm = getFragmentManager();
    FragmentTransaction fragmentTransaction = fm.beginTransaction();
    //int contId = v.getId();
    fragmentTransaction.add(R.id.page, fr);
   // fragmentTransaction.add(view.getId(), fr);
   // fragmentTransaction.commit();

    Intent intent =new Intent(eventList.this, fr.getClass());


这是我们试图在其顶部添加片段的视图的 XML 代码。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/page"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_
 android:layout_
 tools:context="com.example.alex.qtapandroid.ui.fragments.DayFragment">

<!-- TODO: Update blank fragment layout -->



    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical" />

    <ListView
        android:id="@+id/dayList"
        android:layout_
        android:layout_ />

 </FrameLayout>

【问题讨论】:

请发布您的 LogCat,因为那里很可能有一两条错误消息。 使用这一行 fragmentTransaction.commit();如果不起作用,则发布 logcat How to call Fragment from OnClickListener的可能重复 【参考方案1】:

改变这一行

Intent intent =new Intent(eventList.this, fr.getClass());

到:

fragmentTransaction.commit;

更好地替换容器中的片段,

fragmentTransaction.replace(R.id.page, fr);

【讨论】:

我们应该有一个 fragmentTransaction.add 和一个 fragmentTransaction.replace 吗?【参考方案2】:

您应该使用commit() 来启动您的事务,而不是Intent(),您还想使用replace() 而不是add()

 public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l)

    //Assuming that this creates a new fragment
    Fragment fr = new event_description();
    FragmentManager fm = getFragmentManager();
    FragmentTransaction fragmentTransaction = fm.beginTransaction();
    fragmentTransaction.replace(R.id.page, fr, "TAG ID");
    fragmentTransaction.commit();

【讨论】:

以上是关于片段不会启动的主要内容,如果未能解决你的问题,请参考以下文章

getitemcount() 值在片段重新启动之前不会更新

Android 应用程序不会启动,也不会列出错误/警告。使用片段和问题似乎与 var args = ViewFragmentArgs

在通知单击时启动 Fragment 而不会丢失状态

键盘启动时,Android Fragment视图不会滚动

Bot 在启动时不会加入语音通道

Intent 不会从 Fragment 启动 Activity