问题是如何与其他嵌套的 PreferenceFragmentCompat 构建 PreferenceFragmentCompat。
主要活动:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, new PrefsFragment())
.commit();
}
Run Code Online (Sandbox Code Playgroud)
首选项片段:
public class PrefsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
public static class GeneralPreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.pref_general, rootKey);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
} …Run Code Online (Sandbox Code Playgroud) android android-preferences android-fragments android-support-library
编译这个:
#include <iostream>
#include <memory>
template <auto val = 42>
struct A
{
A()
{
std::cerr << val << "\n";
}
};
int main(int argc, const char* argv[])
{
std::shared_ptr<A> a_ptr {new A {}};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出error: use of class template 'A' requires template arguments. 尽管我为非类型模板参数提供了默认值,并希望编译器能够以某种方式看到和使用它。我在这里想念什么?
谢谢。
下面的代码会val2在两次f()调用中打印。f()根据枚举值执行特定分支的正确方法是什么?
enum class E
{
val1,
val2
};
using val1_t = std::integral_constant<E, E::val1>;
using val2_t = std::integral_constant<E, E::val2>;
template <typename T>
void f(T t)
{
if constexpr (std::is_same_v<T, val1_t>)
{
std::cerr << "val1\n";
}
else
{
std::cerr << "val2\n";
}
}
int main()
{
f(E::val1);
f(E::val2);
}
Run Code Online (Sandbox Code Playgroud)