【发布时间】: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