如何在 Android 中使用 Activity 中的 getSupportFragment
How can use getSupportFragment in Activity in Android
我想在 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
中使用上面的代码时(在 activity 中使用片段) 它向我显示了这条消息:
我该如何解决这个问题?
您的 SettingsFragment 是 class 的 android.app.Fragment
class 而不是 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 文件中
在您的 SettingsFragment 中创建您的 SettingsFragment 实例:
public static SettingsFragment getInstance() {
return new SettingsFragment ();
}
像这样将其调用到您的 activity 中:
getSupportFragmentManager().beginTransaction().Add(R.id.container, PrivacyFragment.getInstance()).commit();
我想在 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
中使用上面的代码时(在 activity 中使用片段) 它向我显示了这条消息:
我该如何解决这个问题?
您的 SettingsFragment 是 class 的 android.app.Fragment
class 而不是 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 文件中
在您的 SettingsFragment 中创建您的 SettingsFragment 实例:
public static SettingsFragment getInstance() {
return new SettingsFragment ();
}
像这样将其调用到您的 activity 中:
getSupportFragmentManager().beginTransaction().Add(R.id.container, PrivacyFragment.getInstance()).commit();