【问题标题】:TableLayout not showing when restored from savedInstanceState从 savedInstanceState 恢复时 TableLayout 不显示
【发布时间】:2020-06-17 01:33:13
【问题描述】:

我在片段中有一个 tableLayout,当用于填充单元格的信息取自 OnCreateVIew() 的 savedInstanceState 包时,它没有显示任何内容

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
            View rootView = initializeViews(inflater,container);

        if (savedInstanceState!= null){
            cellsTextArrayList = savedInstanceState.getStringArrayList("extractedTextEt");
            for (String word: cellsTextArrayList){
                addRow(word);
            }
        }

            return rootView;

    }




private void addRow(String word){
        final TableRow tr = new TableRow(getActivity().getApplicationContext());
        final View view = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.cell_layout, null);
        EditText actualCell = view.findViewById(R.id.cell_text);
        actualCell.setText(word);

        tr.addView(view);
        tableLayout.addView(tr);

    }


@Override
    public void onSaveInstanceState (Bundle outState)
    {
        cellsTextArrayList.add("first");
        cellsTextArrayList.add("second");
        cellsTextArrayList.add("third");
        outState.putStringArrayList("extractedTextEt", cellsTextArrayList);
        super.onSaveInstanceState(outState);
    }

cellTextArrayList 正在从 savedInstanceState 对象中恢复,addRow() 方法不起作用。我在一个 Activity 上运行了代码并且它工作了,所以我认为这与 Fragment 生命周期有关。

【问题讨论】:

    标签: android android-fragments restore android-tablelayout


    【解决方案1】:

    在片段中使用 onActivityCreated。

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ...
        if (savedInstanceState != null) {
            //Restore the fragment's state here
        }
    }
    

    然后在活动中,你必须将片段的实例保存在 onSaveInstanceState() 并在 onCreate() 中恢复。

    class MyActivity extends Activity {
    
        private MyFragment 
    
        public void onCreate(Bundle savedInstanceState) {
            ...
            if (savedInstanceState != null) {
                //Restore the fragment's instance
                mMyFragment = getSupportFragmentManager().getFragment(savedInstanceState, "myFragmentName");
                ...
            }
            ...
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
    
            //Save the fragment's instance
            getSupportFragmentManager().putFragment(outState, "myFragmentName", mMyFragment);
        }
    
    }
    

    【讨论】:

    • 感谢您的回答,但我仍然遇到同样的问题
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    相关资源
    最近更新 更多