【问题标题】:Fragment doesnt remeber EditText's content on orientation change片段不记得方向更改时的 EditText 内容
【发布时间】:2015-05-28 03:39:39
【问题描述】:

我的 EditText 在方向更改时遇到了一些问题。出于某种原因,他们不会恢复输入的任何内容。 我有2节课。主要活动和活动中的片段 主要活动:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(
    setContentView(R.layout.
    getFragmentManager().beginTransaction().replace(R.id.controlsBar, new AddItemFragment()).commit();
    }
}

还有片段:

public class AddItemFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_add_item, container, false);
    EditText item = (EditText) view.findViewById(R.id.itemNameAdd);
    EditText amount = (EditText) view.findViewById(R.id.itemAmount);

    if (savedInstanceState != null) {
        System.out.println(savedInstanceState.getString("item"));
        item.setText(savedInstanceState.getString("item", ""));
        amount.setText(savedInstanceState.getString("amount", ""));
    }

    //item.setText("SOME TEXT");
    //amount.setText("SOME TEXT");
    return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
    EditText item = (EditText) getActivity().findViewById(R.id.itemNameAdd);
    EditText amount = (EditText) getActivity().findViewById(R.id.itemAmount);
    outState.putString("item", item.getText().toString());
    outState.putString("amount", amount.getText().toString());
}
}

有趣的是,“System.out.println(savedInstanceState.getString("item"));”这一行在控制台中打印出正确的单词。 此外,我将文本设置为“某些文本”的注释行也有效。 只有当我将文本设置为 savedInstanceState.getString("amount", "") 时,它才会起作用

谢谢

【问题讨论】:

  • 那么你得到了什么?你得到“”(一个空字符串,/默认值)吗?你试过item.setText(savedInstanceState.getString("item"));吗?
  • 是的,我已经尝试过 item.setText(savedInstanceState.getString("item"));而且我没有得到“”,我只是得到提示文本
  • 你收到null了吗?你的键映射了吗?来自Android developmentgetString(String key)“返回与给定键关联的值,如果给定键不存在所需类型的映射或空值与键显式关联,则返回null。”
  • 如果什么是空的?我不确定我的键被映射是什么意思?我在 EditText 上使用了 keylistener,这可能是原因吗?
  • "如果什么是空的?"对savedInstanceState.getString("item"); 的调用返回的内容。在System.out.println(savedInstanceState.getString("item"));这一行中正确返回但在item.setText(savedInstanceState.getString("item"));这一行中没有正确返回是没有意义的...

标签: android android-fragments


【解决方案1】:

尝试将标记为“public void onSaveInstanceState(Bundle outState):

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); // <---- THIS LINE
EditText item = (EditText) getActivity().findViewById(R.id.itemNameAdd);
EditText amount = (EditText) getActivity().findViewById(R.id.itemAmount);
outState.putString("item", item.getText().toString());
outState.putString("amount", amount.getText().toString());
}

另外,看看使用onActivityCreated,并查看我下面评论中的资源。

【讨论】:

  • 我不认为 Fragmenet 有 onRestoreInstanceState 方法.. super.onSaveInstanceState(outState);在 onSavInstanceState 中,不幸的是没有做到这一点
  • 你说得对,我没有意识到这一点。我要删除那部分。看看这个post and answer。它谈到了使用onActivityCreated。另请查看 Android 示例:Ex1Ex2。我觉得这些资源应该有所帮助。我认为活动和片段之间必须有更多的沟通。
猜你喜欢
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多