我正在尝试构建一个带有3个Tabs作为片段的小型录音应用程序。 我了解到,当我启动应用程序时,将使用onCreateView创建2个选项卡。 起初我预计每次切换片段时都会调用PlaceHolderFragment中的onCreatView来显示新片段。 (这是Android Studio中简单的Fragment Acitivty演示,我将其扩展用于录音)。
new Regex("[^0-9-+,.\r]");
记录的持续时间将显示在TextView中。时间在新线程中更新。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView;
Integer section = getArguments().getInt(ARG_SECTION_NUMBER);
switch (section) {
case 1:
rootView = inflater.inflate(R.layout.fragment_main, container, false);
TextView textView = (TextView) rootView.findViewById(R.id.section_label);
textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));
final TextView timeView;
timeView = (TextView) rootView.findViewById(R.id.timeView);
//Button start_stop;
final Button start_stop = (Button) rootView.findViewById(R.id.button);
start_stop.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MainActivity mainAct = (MainActivity) getActivity();
if (recorder == null) {
recorder = new MediaRecorder();
}
if (mainAct.running) {
recorder.stop();
start_stop.setText("start recording");
mainAct.running = false;
mainAct.time = 0;
} else {
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/myrecording.mp3");
recorder.setOutputFile(getActivity().getApplicationContext().getFilesDir() + "/audio.mp3");
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
try {
recorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
recorder.start();
mainAct.running = true;
mainAct.initThread(timeView);
start_stop.setText("stop recording");
}
}
});
break;
case 2:
rootView = inflater.inflate(R.layout.fragment_sound, container, false);
break;
case 3:
rootView = inflater.inflate(R.layout.fragment_pics, container, false);
break;
default:
rootView = null;
break;
}
return rootView;
}`
到目前为止一切正常 - 当我在第一个标签上(显示持续时间)时,录制正在运行 - 即使我切换到第二个标签。 但是,当我切换到第三个选项卡并返回第一个选项卡时,持续时间不再显示。
确切: 当我从选项卡1到选项卡2并返回选项卡1时,时间仍然按预期更新。 从选项卡1到选项卡2再到选项卡3,再返回选项卡2和选项卡1,此屏幕上的所有内容似乎都是首字母。时间不会再更新 - TextView具有初始文本。 我调试了应用程序,当从Tab 3返回时威胁仍在运行,但TextView将无法获得当前持续时间。
有人可以给我一个暗示这种行为吗?我认为当转到Tab 3时,Tab 1的片段将被销毁 - 但是当切换到Tab 1时它将再次构建。
如何解决这个问题?
THX