小编psb*_*psb的帖子

在 PreferenceFragmentCompat 内部实现 PreferenceFragmentCompat

问题是如何与其他嵌套的 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

4
推荐指数
1
解决办法
9728
查看次数

默认指定的非类型模板参数值时出现“使用类模板需要模板参数”错误

编译这个:

#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. 尽管我为非类型模板参数提供了默认值,并希望编译器能够以某种方式看到和使用它。我在这里想念什么?

谢谢。

c++ templates

4
推荐指数
1
解决办法
7685
查看次数

在 constexpr 分支中使用枚举类值

下面的代码会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)

c++ enums constexpr c++17 tag-dispatching

2
推荐指数
1
解决办法
955
查看次数