【问题标题】:Show modal for Android TVAndroid TV 的显示模式
【发布时间】:2018-10-06 14:47:07
【问题描述】:

我正在尝试在 AndroidTV 应用中显示模式。我尝试按照本指南创建 DialogFragment 的子类:https://developer.android.com/reference/android/app/DialogFragment

我有点困惑,因为当我尝试显示对话框时,示例显示:

FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prev = getFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    // Create and show the dialog.
    DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
    newFragment.show(ft, "dialog");

但是当我尝试创建 FragmentTransaction 时,Android Studio 想要使用我认为不同的 FragmentTransaction。

android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
        android.app.Fragment prev = getFragmentManager().findFragmentByTag("dialog");
        if (prev != null) {
            ft.remove(prev);
        }

        ft.addToBackStack(null);
        DialogFragment newFragment = CartDialogFragment.newInstance(111);

所以当我尝试执行newFragment.show 时,它无法解析该方法。

我的 CartDialogFragment 导入看起来像:

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

我需要将其他导入添加到我的 Gradle 文件吗?这种类型的 DialogFragment 是否与 AndroidTV 倾斜库兼容?

【问题讨论】:

  • 您是否尝试将支持库片段与来自基础 SDK 的片段混合在一起?不要那样做,使用一个或另一个(我的建议将全部来自支持库)。
  • @GabeSechan 你好。我不是故意混合碎片。我只是第一次看这个东西。我应该将其他类型的 DialogFragment 用于电视吗?
  • 这不是关于电视,而是关于支持库。如果您使用支持库片段(或支持库活动),请改为扩展 android.support.v4.app.DialogFragment。支持库的存在是为了将修复程序向后移植到旧版本的应用程序,并且将两者混合会导致问题。这也意味着使用getFragmentManager等的支持版本。
  • 我怀疑这是因为您声明了 android.app.FragmentTransaction ft。仅在名称冲突时才需要使用完全限定名称,并且仅当您在其他地方使用支持时才会发生这种情况库片段交易。
  • @Crystal,你有没有想过解决方案?我也有类似的情况。

标签: android android-tv


【解决方案1】:

尝试将getFragmentManager() 替换为getSupportFragmentManager(),如下所示:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
    ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog");

因为您的片段扩展了android.support.v4.app.DialogFragment,您还应该使用FragmentManager 的兼容版本。

也可以看看DialogFragment

【讨论】:

猜你喜欢
  • 2018-11-27
  • 2019-01-13
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 2021-03-03
  • 2016-11-14
相关资源
最近更新 更多