Android片段:切换片段后,在Thread内更新文本

时间:2015-11-08 15:59:03

标签: android android-fragments ui-thread page-fragments

我正在尝试构建一个带有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

0 个答案:

没有答案