<html devsite="true">
  <head>
    <title>FragmentManager.BackStackEntry</title>
{% setvar book_path %}/reference/kotlin/androidx/_book.yaml{% endsetvar %}
{% include "_shared/_reference-head-tags.html" %}
  </head>
  <body>
    <h1>FragmentManager.BackStackEntry</h1>
{% setvar page_path %}androidx/fragment/app/FragmentManager.BackStackEntry.html{% endsetvar %}
{% setvar can_switch %}1{% endsetvar %}
{% include "reference/_kotlin_switcher2.md" %}
    <p>
      <pre>interface FragmentManager.BackStackEntry</pre>
    </p>
    <hr>
    <p>Representation of an entry on the fragment back stack, as created with <code><a href="/reference/kotlin/androidx/fragment/app/FragmentTransaction.html#addToBackStack(java.lang.String)">FragmentTransaction.addToBackStack()</a></code>. Entries can later be retrieved with <code><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.html#getBackStackEntryAt(int)">FragmentManager.getBackStackEntryAt()</a></code>. </p>
    <p>Note that you should never hold on to a BackStackEntry object; the identifier as returned by <code><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getId()">getId</a></code> is the only thing that will be persisted across activity instances.</p>
    <h2>Summary</h2>
    <div class="devsite-table-wrapper">
      <table class="responsive">
        <thead>
          <tr>
            <th colspan="2"><h3>Public functions</h3></th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td><code><a href="https://developer.android.com/reference/java/lang/CharSequence.html">CharSequence</a>?</code></td>
            <td width="100%">
              <div><code><span><del><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getBreadCrumbShortTitle()">getBreadCrumbShortTitle</a></del></span>()</code></div>
              <p><strong>This function is deprecated.</strong> 
                <p>Store breadcrumb short titles separately from back stack entries.</p>
              </p>
            </td>
          </tr>
          <tr>
            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></code></td>
            <td width="100%">
              <div><code><span><del><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getBreadCrumbShortTitleRes()">getBreadCrumbShortTitleRes</a></del></span>()</code></div>
              <p><strong>This function is deprecated.</strong> 
                <p>Store breadcrumb short titles separately from back stack entries.</p>
              </p>
            </td>
          </tr>
          <tr>
            <td><code><a href="https://developer.android.com/reference/java/lang/CharSequence.html">CharSequence</a>?</code></td>
            <td width="100%">
              <div><code><span><del><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getBreadCrumbTitle()">getBreadCrumbTitle</a></del></span>()</code></div>
              <p><strong>This function is deprecated.</strong> 
                <p>Store breadcrumb titles separately from back stack entries.</p>
              </p>
            </td>
          </tr>
          <tr>
            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></code></td>
            <td width="100%">
              <div><code><span><del><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getBreadCrumbTitleRes()">getBreadCrumbTitleRes</a></del></span>()</code></div>
              <p><strong>This function is deprecated.</strong> 
                <p>Store breadcrumb titles separately from back stack entries.</p>
              </p>
            </td>
          </tr>
          <tr>
            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></code></td>
            <td width="100%">
              <div><code><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getId()">getId</a>()</code></div>
              <p>Return the unique identifier for the entry.</p>
            </td>
          </tr>
          <tr>
            <td><code><a href="https://developer.android.com/reference/java/lang/String.html">String</a>?</code></td>
            <td width="100%">
              <div><code><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getName()">getName</a>()</code></div>
              <p>Get the name that was supplied to <code><a href="/reference/kotlin/androidx/fragment/app/FragmentTransaction.html#addToBackStack(java.lang.String)">FragmentTransaction.addToBackStack(String)</a></code> when creating this entry.</p>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
    <h2>Public functions</h2>
    <div><a name="getBreadCrumbShortTitle--"></a>
      <h3 class="api-name" id="getBreadCrumbShortTitle()">getBreadCrumbShortTitle</h3>
      <pre class="api-signature no-pretty-print">fun&nbsp;<span><del><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getBreadCrumbShortTitle()">getBreadCrumbShortTitle</a></del></span>():&nbsp;<a href="https://developer.android.com/reference/java/lang/CharSequence.html">CharSequence</a>?</pre>
      <aside class="caution"><strong>This function is deprecated.</strong><br>
        <p>Store breadcrumb short titles separately from back stack entries. For example, by using an <code>android:label</code> on a fragment in a navigation graph.</p>
      </aside>
      <p>Return the short bread crumb title for the entry, or null if it does not have one.</p>
    </div>
    <div><a name="getBreadCrumbShortTitleRes--"></a>
      <h3 class="api-name" id="getBreadCrumbShortTitleRes()">getBreadCrumbShortTitleRes</h3>
      <pre class="api-signature no-pretty-print">fun&nbsp;<span><del><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getBreadCrumbShortTitleRes()">getBreadCrumbShortTitleRes</a></del></span>():&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></pre>
      <aside class="caution"><strong>This function is deprecated.</strong><br>
        <p>Store breadcrumb short titles separately from back stack entries. For example, by using an <code>android:label</code> on a fragment in a navigation graph.</p>
      </aside>
      <p>Return the short bread crumb title resource identifier for the entry, or 0 if it does not have one.</p>
    </div>
    <div><a name="getBreadCrumbTitle--"></a>
      <h3 class="api-name" id="getBreadCrumbTitle()">getBreadCrumbTitle</h3>
      <pre class="api-signature no-pretty-print">fun&nbsp;<span><del><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getBreadCrumbTitle()">getBreadCrumbTitle</a></del></span>():&nbsp;<a href="https://developer.android.com/reference/java/lang/CharSequence.html">CharSequence</a>?</pre>
      <aside class="caution"><strong>This function is deprecated.</strong><br>
        <p>Store breadcrumb titles separately from back stack entries. For example, * by using an <code>android:label</code> on a fragment in a navigation graph.</p>
      </aside>
      <p>Return the full bread crumb title for the entry, or null if it does not have one.</p>
    </div>
    <div><a name="getBreadCrumbTitleRes--"></a>
      <h3 class="api-name" id="getBreadCrumbTitleRes()">getBreadCrumbTitleRes</h3>
      <pre class="api-signature no-pretty-print">fun&nbsp;<span><del><a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getBreadCrumbTitleRes()">getBreadCrumbTitleRes</a></del></span>():&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></pre>
      <aside class="caution"><strong>This function is deprecated.</strong><br>
        <p>Store breadcrumb titles separately from back stack entries. For example, by using an <code>android:label</code> on a fragment in a navigation graph.</p>
      </aside>
      <p>Return the full bread crumb title resource identifier for the entry, or 0 if it does not have one.</p>
    </div>
    <div><a name="getId--"></a>
      <h3 class="api-name" id="getId()">getId</h3>
      <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getId()">getId</a>():&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></pre>
      <p>Return the unique identifier for the entry. This is the only representation of the entry that will persist across activity instances.</p>
    </div>
    <div><a name="getName--"></a>
      <h3 class="api-name" id="getName()">getName</h3>
      <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/reference/kotlin/androidx/fragment/app/FragmentManager.BackStackEntry.html#getName()">getName</a>():&nbsp;<a href="https://developer.android.com/reference/java/lang/String.html">String</a>?</pre>
      <p>Get the name that was supplied to <code><a href="/reference/kotlin/androidx/fragment/app/FragmentTransaction.html#addToBackStack(java.lang.String)">FragmentTransaction.addToBackStack(String)</a></code> when creating this entry.</p>
    </div>
  </body>
</html>
