【问题标题】:questions about moving backwards of an intent关于向后移动意图的问题
【发布时间】:2016-08-18 10:06:00
【问题描述】:

我是 Android 的初学者,所以我一直坚持使用 Intent 方法。 我创建了三个 java 类,MainActivity 给 DetailActivity 一个意图,在 DetailActivity 中,textView 处理来自 MainActivity 的数据。 DetailActivity 给 TheAnswer 一个意图(它们都有片段)。问题是,当我单击 TheAnswer 左上角的 backwords 图标时。 DetailActivity 中的 textView 为空。 那么,当我从 TheAnswer 移回时,我应该怎么做才能确保 DetailActivity 中 textView 的内容得到很好的保存?

下面的内容是我写的代码。

MainActivityFragment

View rootView = inflater.inflate(R.layout.fragment_main, container, false);

    inputSearch = (EditText) rootView.findViewById(R.id.inputSearch);
    ListView listView = (ListView) rootView.findViewById(R.id.list_questions);
    listView.setAdapter(mQuest);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

            String element = mQuest.getItem(position).substring(0,3);
            int pointer = 0;
            for(int i=0;i<3;i++)
                pointer = pointer * 10 + (int)(element.charAt(i)-'0');
            String data = "";
            StringBuffer sbuffer = new StringBuffer();
            InputStream is = getResources().openRawResource(
                    index[pointer-1]);
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            if (is != null) {
                try {
                    while ((data = reader.readLine()) != null) {
                        sbuffer.append(data + "\n");
                    }
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }


            Intent intent = new Intent(getActivity(), DetailActivity.class)
                    .putExtra(Intent.EXTRA_TEXT,sbuffer.toString());
            startActivity(intent);

        }
    });

DetailActivityFragment(我遇到问题的类)

公共类 DetailActivityFragment 扩展 Fragment{

private String forecastStr;
TextView text;

public DetailActivityFragment() {
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_detail, container, false);

    // The detail Activity called via intent.  Inspect the intent for forecast data.
    Intent intent = getActivity().getIntent();
    if (intent != null && intent.hasExtra(Intent.EXTRA_TEXT)) {
        forecastStr = intent.getStringExtra(Intent.EXTRA_TEXT);
        text = (TextView) rootView.findViewById(R.id.detail_text);
        text.setMovementMethod(new ScrollingMovementMethod());
        text.setText(forecastStr);
    }

    Button mButton = (Button) rootView.findViewById(R.id.bottle);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // here you set what you want to do when user clicks your button,
            // e.g. launch a new activity
            Intent intent = new Intent(getActivity(), TheAnswer.class);
            intent.putExtra(Intent.EXTRA_TEXT, forecastStr);
            startActivity(intent);
        }
    });

    return rootView;
}

}

终于,TheAnswerFragment

公共类 TheAnswerFragment 扩展片段 {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_the_answer, container, false);
    Intent intent = getActivity().getIntent();

    if (intent != null && intent.hasExtra(Intent.EXTRA_TEXT)) {
        String message = intent.getStringExtra(Intent.EXTRA_TEXT);

        ImageView image = (ImageView) rootView.findViewById(R.id.image);
        image.setImageResource(R.drawable.aa);
    }

    return rootView;
}

}

【问题讨论】:

    标签: java android


    【解决方案1】:

    这都是关于存储和恢复实例状态的。

    在此处查看 Android 文档:

    https://developer.android.com/training/basics/activity-lifecycle/recreating.html

    如果你想让它更容易/更清洁,你可以选择使用这个

    https://github.com/frankiesardo/icepick

    附言这里需要注意片段,并确保查看静态片段 createInstance() 模式,以便将创建参数存储在附加到片段参数的包中。

    【讨论】:

    • 所以我需要添加onSaveInstanceState()方法,并且在onCreateView()方法中检查saveInstanceState是否为null,如果不是,从saveInstanceState中取回数据,对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多