【问题标题】:How can use getSupportFragment in Activity in Android如何在 Android 的 Activity 中使用 getSupportFragment
【发布时间】:2017-01-09 06:00:59
【问题描述】:

我想在activity 中使用Fragment,对于这个问题我想使用getSupportFragment
我在activity 中编写了以下代码,用于显示fragment

android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
SettingsFragment settingsFragment = new SettingsFragment();
fragmentTransaction.add(R.id.frame_containerone, settingsFragment, "Setting");
fragmentTransaction.commit();

我的 SettingFragment 代码:

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.Log;

import in.nouri.cameraalways.R;
import in.nouri.cameraalways.Service.OverlayService;

public class SettingsFragment extends PreferenceFragment {

    SharedPreferences.OnSharedPreferenceChangeListener listener = null;

    SharedPreferences defaultSharedPreference;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            defaultSharedPreference = PreferenceManager.getDefaultSharedPreferences(getContext());
        } else {
            defaultSharedPreference = PreferenceManager.getDefaultSharedPreferences(getActivity());
        }
        Log.d("defaultpPref", defaultSharedPreference.getAll().toString());
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        listener = (SharedPreferences.OnSharedPreferenceChangeListener) activity;
    }

    @TargetApi(Build.VERSION_CODES.M)
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        listener = (SharedPreferences.OnSharedPreferenceChangeListener) context;
    }

    @Override
    public void onDetach() {
        super.onDetach();
        listener = null;
    }

    @Override
    public void onResume() {
        Log.d(getClass().getSimpleName(), "onResume");
        super.onResume();
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(listener);

        CheckBoxPreference preference_enabled = (CheckBoxPreference) this.findPreference(getString(R.string.key_pref_enabled));
        preference_enabled.setChecked(OverlayService.isRunning());
    }

    @Override
    public void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences()
                .unregisterOnSharedPreferenceChangeListener(listener);
    }
}

但是当在Activity (用于在活动中使用片段)中使用上面的代码时,它会向我显示以下消息:

我该如何解决这个问题?

【问题讨论】:

  • 尝试使用此导入 import android.support.v4.preference.PreferenceFragment; 而不是 import android.preference.PreferenceFragment;
  • @PavneetSingh,谢谢,但未找到导入 android.support.v4.preference.PreferenceFragment;
  • @dfgb 查看我的更新答案

标签: android android-fragments android-preferences


【解决方案1】:

您的 SettingsFragment 是 android.app.Fragment 类而不是 android.support.v4.app.Fragment 的子类。更改片段中的导入语句,您就可以开始了。

更新 而不是import android.preference.PreferenceFragment; 在您的设置片段中使用import android.support.v7.preference.PreferenceFragmentCompat;。 请注意,它需要compile 'com.android.support:preference-v7:24.2.1' 在你的 app.gradle 文件中

【讨论】:

  • 请在 settingFragment 中查看我的导入:import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.util.Log; import in.nouri.cameraalways.R; import in.nouri.cameraalways.Service.OverlayService;
  • 感谢朋友的回答。但是在运行应用程序时添加此导入和编译文件时,会显示此错误并显示强制关闭错误。错误图片:uupload.ir/files/9n0z_34.jpg 请查看此图片并帮助我。请
【解决方案2】:

在 SettingsFragment 中像这样创建 SettingsFragment 的实例:

public static SettingsFragment getInstance() { return new SettingsFragment (); }

将其调用到您的活动中,如下所示: getSupportFragmentManager().beginTransaction().Add(R.id.container, PrivacyFragment.getInstance()).commit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多