使用片段中的onSaveInstanceState()保存视图状态

时间:2014-02-25 17:13:06

标签: android android-fragments

有很多关于onSaveInstanceState()的问题没有被调用等。但是我无法找到这个特定问题的答案:

初始状况

使用Android Studio创建的基本应用程序,其中包含默认的NavDrawer实现。只需添加一个按钮作为测试。

意图

测试保存可见性以及按钮和文本视图的文本。

问题

如果orentation发生变化,使用onSaveInstanceState保存的值对该对象没有影响。

我尝试过的与视图/对象相关的所有内容都没有效果。

修改

我认为这是因为片段被“创建”的方式 - >新实例。我如何将数据传递给这样一个“重新创建”的片段。

 /**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";

    private Button btnConnect;
    private ProgressBar progress;

    /**
     * Returns a new instance of this fragment for the given sectionausgangssituation
     * number.
     */
    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        TextView textView = (TextView) rootView.findViewById(R.id.section_label);
        textView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));
        btnConnect = (Button) rootView.findViewById(R.id.conov_btn_connect);
        progress = (ProgressBar) rootView
                .findViewById(R.id.conov_progress_connection);

        // StatusLabel.setText(BluetoothController.get().getStatus().getMessage());
        btnConnect.setOnClickListener(this);

        if (savedInstanceState != null) {
            Toast.makeText(getActivity(), "## test ##",
                    Toast.LENGTH_LONG).show();
            btnConnect.setText(savedInstanceState.getString("savText"));
        } else {
            progress.setVisibility(View.GONE);
        }

        return rootView;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((MainActivity) activity).onSectionAttached(
                getArguments().getInt(ARG_SECTION_NUMBER));
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("savText", "Hallo");
    }

0 个答案:

没有答案