我有一个按预期运行的简单活动.
import android.app.Activity;
import android.app.FragmentManager;
// import android.support.v4.app.FragmentManager;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// FragmentManager fm = getSupportFragmentManager(); // ActionBarActivity
FragmentManager fm = getFragmentManager(); // Activity
}
}
Run Code Online (Sandbox Code Playgroud)
然后我换了
import android.app.FragmentManager;
Run Code Online (Sandbox Code Playgroud)
同
import android.support.v4.app.FragmentManager;
Run Code Online (Sandbox Code Playgroud)
所以我可以支持我的旧设备..但是,这报告错误:
Incompatible types.
Required: android.support.v4.app.FragmentManager
Found: android.app.FragmentManager
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我发现流行的解决方案是使用getSupportFragmentManager(),但这仅适用于ActionBarActivites [编辑 - 请参阅答案]和FragmentActivities.
无法从android.app.FragmentManager转换为android.support.v4.app.FragmentManager
另一个相关的解决方案指向使用FragmentActivity,但这似乎有相同的遗留问题.
对于MyActivity类型,未定义getFragmentManager()方法
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
// …Run Code Online (Sandbox Code Playgroud) 我正在创建一个包含录音和播放的应用程序.是否可以以MP3格式录制文件?
我需要输出文件作为mp3格式.谢谢.
目标
我正在研究简化的音频播放器,如果用户离开应用程序(主页按钮,任务切换,任务中断,屏幕关闭等),则需要停止播放.我可以让音频继续在后台播放并打开一个带有暂停/停止选项的通知栏,但我的用户几乎没有计算机知识,有些人可能无法在没有帮助的情况下停止音频.
问题
为了停止音频,我需要知道在活动被销毁之前应用程序何时移出焦点.Android提供了两种方法onStop和onPause,它们表明正在发生的事情,但不是什么.如果可能,我如何知道活动何时因方向改变而被销毁?
解决方案失败
我可以在onPause(或onStop/onDestroy)中使用isFinishing()来检查应用程序是否正在关闭并停止音频.但这只会告诉我们申请何时结束.它不区分移动到背景和旋转.
IsChangingConfigurations是一个有趣的函数,可以解决我的问题,但这需要API 11,我有兴趣支持API 10.
另一个解决方案似乎是一个糟糕的黑客.与此解决方案一样,OrientationChangeListener 看起来很理想,但它只注意到活动关闭并重新启动后方向已更改.
与上述选项类似,onConfigurationChanged仅在完成方向更改后报告方向更改.
有缺陷但可能的解决方案
一种解决方案是当媒体播放器失去与活动的连接时通知媒体播放器服务,然后在一段时间后自动暂停.这绝对是一个可行的解决方案,但它并不理想.多少时间合适?如果平板电脑运行缓慢且旋转时间比平时长,会发生什么?如果没有更好的选择,我会回到这个解决方案.这似乎是一个黑客,容易出错.
我有一个简单的程序,可以插入或附加一些空格来对齐文本。
f()
{
string word = “This word”;
const string space = “ “;
int space_num = 5; // this number can vary
for (int i = 0; i < space_num; i++)
{
word.insert(0, space);
}
cout << word;
}
Run Code Online (Sandbox Code Playgroud)
现在这有效,但我想知道是否有更有效的方法来做到这一点。不是在优化我的程序方面,而是在标准实践中。
我可以想象两种潜在的方法:
1 - 有没有办法创建一个 20 个空格的字符串,并附加这些空格的一部分,而不是重复添加一个空格。
2 – 有没有办法用可变数量的空格创建字符串并附加它?
看看这个cplusplus.com时间示例,让我更多地思考指针.代码没有delete(也没有new).
警告:我一般尽量避免使用指针,所以我绝对不会精通.
我从下面的例子中删除了很多代码,以便专注于我的问题:
/* time example */
#include <stdio.h> /* printf */
#include <time.h> /* time_t, struct tm, difftime, time, mktime */
int main ()
{
time_t timer;
time(&timer); /* get current time; same as: timer = time(NULL) */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我应该在此结束时删除计时器,还是只是指向系统资源?我的理解是每当我使用时new,我都应该使用delete.认为我没有使用是不对的new,我不需要delete.
这个堆栈问题似乎是我正在寻找和解释我不需要delete(它匹配网站上的示例代码),因为我没有做new; 但是,我不确定我使用的函数是不是在new某个地方调用(因为我发现它很难读取源代码).我怎么知道?我需要知道吗?
我真的很讨厌使用这个旧的时间代码,不能等待即将到来的C++ 20 chrono更新,但这对我的项目来说太遥远了.