我有一个带有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)
所以我的问题是; 这是一个错误,如果是这样,我该怎么办呢?
我有以下代码生成片段,但只有当我将它们添加到我的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) 我正在寻找一种在c ++中对模板化方法,类和函数进行单元测试的好方法.我觉得仅使用单一类型进行测试是不够的,只是复制单元测试并替换类型感觉不对.
更具体地说,我正在研究Matrix类并使用Boost的单元测试框架.Matrix适用于不同类型.它主要用于基本类型,但我也希望它支持具体类型.
注意,我这样做是出于学习目的,这就是为什么我没有使用现有的矩阵实现.
所以我一直在尝试通过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) 我只是碰到了一些奇怪的东西.我想知道这是不是一个错误,如果不是,我希望有人可以解释这个问题.
我的问题是,当我创建一个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)
编译此代码时,我收到以下错误:
{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) 我有一个 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) 这可能是一个愚蠢和愚蠢的事情 - 但我想了解这里发生了什么.
我有以下代码:
#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
我根据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++ ×4
android ×3
templates ×2
c++11 ×1
daemon ×1
linux ×1
scala ×1
std-function ×1
type-bounds ×1
unit-testing ×1