小编jpi*_*ihl的帖子

调用setCurrentItem(0)时不会触发onPageSelected

我有一个带有ViewPager的Activity,它显示了一堆图片.启动时,ViewPager的位置根据用户在上一个Activity中选择的内容进行设置.类似于画廊.

我希望每次选择新页面时调用onPageSelected,即首次打开活动时或用户滑动到新页面时.

我设置起点如下:

 mPager.setCurrentItem(index);
Run Code Online (Sandbox Code Playgroud)

一切正常,除非在将index设置为0的情况下调用setCurrentItem,因为这不会触发onPageSelected.

mPager.setOnPageChangeListener(new OnPageChangeListener() {
  @Override
  public void onPageSelected(int index) {
    Log.d(TAG, "onPageSelected " + index);
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是; 这是一个错误,如果是这样,我该怎么办呢?

android android-viewpager

61
推荐指数
3
解决办法
3万
查看次数

如何将片段添加到以编程方式生成的布局?

我有以下代码生成片段,但只有当我将它们添加到我的XML文件中存在的线性布局时.

LinearLayout fragmentsLayout = (LinearLayout) findViewById(R.id.foodItemActvity_linearLayout_fragments);
FragmentManager fragMan = getFragmentManager();
FragmentTransaction fragTransaction = fragMan.beginTransaction();

Fragment myFrag= new ImageFragment();
fragTransaction.add(R.id.foodItemActvity_linearLayout_fragments, myFrag , "fragment" + fragCount);
fragTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

现在,如果我想将该片段添加到XML文件中尚不存在的线性布局,例如

LinearLayout rowLayout = new LinearLayout();
Run Code Online (Sandbox Code Playgroud)

第2部分:

    Fragment frag1 = generateAppropriateFragment(type1);
    Fragment frag2 = generateAppropriateFragment(type2);

    LinearLayout fragmentsLayout = (LinearLayout) findViewById(R.id.foodItemActvity_linearLayout_fragments);
    LinearLayout rowLayout = new LinearLayout(this);
    rowLayout.setId(12345); // add counter to end

    fragmentsLayout.addView(rowLayout);     
    getFragmentManager().beginTransaction().add(rowLayout.getId(), frag1, "fragment_grandchild" + fragCount).commit();
    fragCount++;
    getFragmentManager().beginTransaction().add(rowLayout.getId(), frag2, "fragment_grandchild" + fragCount).commit();
    fragCount++;
Run Code Online (Sandbox Code Playgroud)

android android-linearlayout android-fragments

49
推荐指数
1
解决办法
10万
查看次数

单元测试模板化c ++方法/类/函数的好方法是什么?

我正在寻找一种在c ++中对模板化方法,类和函数进行单元测试的好方法.我觉得仅使用单一类型进行测试是不够的,只是复制单元测试并替换类型感觉不对.

更具体地说,我正在研究Matrix类并使用Boost的单元测试框架.Matrix适用于不同类型.它主要用于基本类型,但我也希望它支持具体类型.

注意,我这样做是出于学习目的,这就是为什么我没有使用现有的矩阵实现.

c++ templates unit-testing

14
推荐指数
1
解决办法
1792
查看次数

获取Scala类型绑定错误:未找到:键入<%<

所以我一直在尝试通过Twitter Scala学校学习Scala .但我现在仍然坚持他们的一个类型绑定示例.

特别是,使用<%<类型关系运算符,类型必须可以作为特定类型查看.

当我在Scala控制台中执行以下代码时:

scala> class Container[A](value: A) { def addIt(implicit evidence: A <%< Int) = 123 + value }
Run Code Online (Sandbox Code Playgroud)

...我收到以下错误:

<console>:7: error: not found: type <%<
       class Container[A](value: A) { def addIt(implicit evidence: A <%< Int) = 123 + value }
                                                                     ^
<console>:7: error: overloaded method value + with alternatives:
  (x: Double)Double <and>
  (x: Float)Float <and>
  (x: Long)Long <and>
  (x: Int)Int <and>
  (x: Char)Int <and>
  (x: Short)Int <and>
  (x: Byte)Int <and>
  (x: …
Run Code Online (Sandbox Code Playgroud)

scala type-bounds

7
推荐指数
1
解决办法
1484
查看次数

带有默认std :: function参数的模板化函数会导致符号[...]已定义

我只是碰到了一些奇怪的东西.我想知道这是不是一个错误,如果不是,我希望有人可以解释这个问题.

我的问题是,当我创建一个std::function带有默认参数的模板化函数时,我只能创建一个这个函数的模板实例,否则会出错.

请考虑以下代码:

#include <functional>

template<bool B>
void wut(std::function<void()> f = []() {})
{
    f();
}

int main() {
    wut<false>(); // works
    wut<false>(); // still works
    wut<true>();  // error
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

https://ideone.com/VlVcUv

编译此代码时,我收到以下错误:

{standard input}: Assembler messages:
{standard input}:28: Error: symbol `_ZNSt14_Function_base13_Base_managerIUlvE_E10_M_managerERSt9_Any_dataRKS3_St18_Manager_operation' is already defined
{standard input}:127: Error: symbol `_ZNSt17_Function_handlerIFbvEUlvE_E9_M_invokeERKSt9_Any_data' is already defined
Run Code Online (Sandbox Code Playgroud)

c++ templates std-function

5
推荐指数
1
解决办法
85
查看次数

如何根据 SDK 版本选择 Activity 从启动器启动?

我有一个 Android 应用程序,它在启动器中有多个入口点。其中一些需要比其他人更高的 SDK 版本,如果设备的 SDK 版本低于他们需要的版本,我想禁用或隐藏这些。

基本上我的清单看起来像这样:

<application
    ...
    <activity
        android:name=".Activity1"
        ...
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Activity2"
        ...
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    ... // more launcher activities follows
</application>
Run Code Online (Sandbox Code Playgroud)

Activity1需要 SDK 版本 19,但Activity2需要 SDK 版本 21。我的最低 SDK 版本是 19。我希望Activity2在 SDK 版本 < 21 的设备上安装应用程序时隐藏。

我知道我可以用这样的onCreate方法进行检查Activity2

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        finish();
        return; …
Run Code Online (Sandbox Code Playgroud)

android android-4.4-kitkat android-5.0-lollipop

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

带有调用运算符的std :: bind on member

这可能是一个愚蠢和愚蠢的事情 - 但我想了解这里发生了什么.

我有以下代码:

#include <iostream>
#include <functional>

namespace
{
    struct call
    {
        void operator()() const
        {
            std::cout << "call::operator()" << std::endl;
        }
    };

    struct dummy
    {
        dummy() = default;
        dummy(const dummy&) = delete;

        call member;
    }; 
}
Run Code Online (Sandbox Code Playgroud)

因此,member本质上可以像任何其他对象方法一样工作,允许它被调用为:

dummy d;
d.member()
Run Code Online (Sandbox Code Playgroud)

哪个会打印call::operator().

现在我想使用bind来做到这一点,初始实现看起来像这样:

int main() 
{
    dummy d;

    auto b = std::bind(&dummy::member, &d);
    b();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译,但没有打印.我真的不明白发生了什么 - 它编译的事实,但产生没有输出困惑我:)当然一些魔法正在肚子里面std::bind,但是什么?

以下是使用代码的链接:https: //ideone.com/P81PND

c++ c++11

3
推荐指数
1
解决办法
103
查看次数

如何在 Linux 上守护 ac/c++ 程序

我根据http://linux.die.net/man/1/daemonize上的指南在 Linux 上编写了一个守护程序,但是该进程崩溃了几次,我找不到原因。它困扰了我几天。

今天我碰巧读了 W.Richard Stevens 所著的“UNIX 网络编程第 1 卷,第三版”。在本书中,它展示了一个编写守护程序的例子。阅读示例后,我意识到我的代码中缺少“与控制终端解除关联”。

现在我的问题是守护进程,为什么我们需要与控制终端解除关联?它与进程的崩溃有关吗?我的守护进程代码中是否缺少其他任何地方?

感谢您的回复。

这是我的代码:

bool daemonize()
{
    // http://linux.die.net/man/1/daemonize

    // change working dir to root
    (void) uchdir("/");

    // close stdin, stderr, stdout
    if (int fdnull = open("/dev/null", O_RDWR))
    {   
        dup2 (fdnull, STDIN_FILENO);
        dup2 (fdnull, STDOUT_FILENO);
        dup2 (fdnull, STDERR_FILENO);
        close(fdnull);
    }   
    else
    {   
        Log (ERR, "Failed to open /dev/null");
        return false;
    }   

    // detach from previous process group
    if (setsid () == -1)      /* request a new session (job control) …
Run Code Online (Sandbox Code Playgroud)

c++ linux daemon

1
推荐指数
1
解决办法
3万
查看次数