gpt4 book ai didi

java - 在 API 8 中调用 PreferenceFragment 方法

转载 作者:行者123 更新时间:2023-12-01 11:22:50 25 4
gpt4 key购买 nike

我是一名 Android 新手,试图将 Material 设计应用到我拥有的应用程序中。在旧应用程序中,我调用我的设置菜单项加载了扩展 PreferenceActivity 的 Activity 。

为了使其现代化,我尝试使用 PreferenceFragment,如教程 http://www.cs.dartmouth.edu/~campbell/cs65/lecture12/lecture12.html 中所示。

对于 API 8,编译器不允许我调用 getFragmentManager(),只能调用 getSupportFragmentManager()。但编译器不允许我加载新的 fragment 。我的代码如下所示:

android.support.v4.app.FragmentManager mFragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction();
MainSettingsFragment mPrefsFragment = new MainSettingsFragment();
mFragmentTransaction.replace(android.R.id.content, mPrefsFragment);

我在 mPrefsFragment 下面看到一条红线,并且收到以下错误消息:

Wrong 2nd argument type. Found: 'com.src.xxx.MainActivity.MainSettingsFragment', required: 'android.support.v4.app.Fragment'
replace(int,android.support.v4.app.Fragment) in FragmentTransaction cannot be applied
to (int,com.src.xxx.MainActivity.MainSettingsFragment)

我做错了什么?据我所知,替换中的第二个参数是正确的类型。

我的代码的相关部分如下所示:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item_edit_settings:
android.support.v4.app.FragmentManager mFragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction();
MainSettingsFragment mPrefsFragment = new MainSettingsFragment();
mFragmentTransaction.replace(android.R.id.content, mPrefsFragment);
mFragmentTransaction.commit();
//startActivity(new Intent(this, EditSettingsActivity.class));
//new MainSettingsFragment(getSupportFragmentManager(), MainActivity.this));
return true;
}
return false;
}

public static class MainSettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}

}

最佳答案

您不能简单地在 API8 中使用 PreferenceFragment,因为它是在 API11 中添加的。它只能通过 getFragmentManager() 启动。

如果您确实想支持较旧的 API,最好坚持使用其中包含内部 FragmentPreferenceActivity。要继续设计,您可以尝试 AppCompatPreferenceActivity

可以找到 here在示例中,您可以通过 Android Studio 导入(我认为)。它保留了 Preference 功能,但也实现了 AppCompatActivity 方法。

关于java - 在 API 8 中调用 PreferenceFragment 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com