首页 > 解决方案 > 如何在 PreferenceScreen 中为 PreferenceSwitch 设置 TapTargetView

问题描述

我在 PreferenceScreen 中为 PreferenceSwitch 设置 TapTargetView 时遇到问题 我想在 PreferenceScreen 中为 PreferenceSwitch 设置 TapTargetView 但 TapTargetView 库方法是基于视图构建的,我无法将 PreferenceSwitch 传递给 TapTargetView

我的代码在这里:

public static void showSettingGuide(AppCompatActivity activity, Preference... view){
        new TapTargetSequence(activity)
                .targets(
                        TapTarget.forView(activity.findViewById(view[0].getLayoutResource()),activity.getResources().getString(R.string.night_mode),activity.getResources().getString(R.string.NightModeGuide))
                .cancelable(false),
                        TapTarget.forView(activity.findViewById(view[1].getLayoutResource()),activity.getResources().getString(R.string.automatic_night_text),activity.getResources().getString(R.string.AutoNightModeGuide))
                .cancelable(false),
                        TapTarget.forView(activity.findViewById(view[2].getLayoutResource()),activity.getResources().getString(R.string.keepScreenOn),activity.getResources().getString(R.string.keepScreenGuide))
                .cancelable(false),
                        TapTarget.forView(activity.findViewById(view[3].getLayoutResource()),activity.getResources().getString(R.string.appState),activity.getResources().getString(R.string.appStateGuide)))
                .listener(new TapTargetSequence.Listener() {
                    @Override
                    public void onSequenceFinish() {
                        activity.getSharedPreferences(Constants.GuidePrefs,Context.MODE_PRIVATE).edit().putBoolean(Constants.setting_guide_prefs,true).apply();
                    }

                    @Override
                    public void onSequenceStep(TapTarget lastTarget, boolean targetClicked) {}

                    @Override
                    public void onSequenceCanceled(TapTarget lastTarget) {
                        activity.getSharedPreferences(Constants.GuidePrefs,Context.MODE_PRIVATE).edit().putBoolean(Constants.setting_guide_prefs,true).apply();
                    }
                })
                .start();
    }

和我的错误:

java.lang.IllegalArgumentException: Given null view to target
        at com.getkeepsafe.taptargetview.ViewTapTarget.<init>(ViewTapTarget.java:31)
        at com.getkeepsafe.taptargetview.TapTarget.forView(TapTarget.java:175)
        at ir.xrostamzadeh.physics.other.Global.showSettingGuide(Global.java:589)
        at ir.xrostamzadeh.physics.fragments.SettingFragment.onStart(SettingFragment.java:68)
        at androidx.fragment.app.Fragment.performStart(Fragment.java:2632)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:915)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6186)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)

如果你能帮忙我会很高兴

标签: javaandroidtaptargetview

解决方案


推荐阅读