0

我有带有 2 个标签的 FragmentTabHost。每个片段(选项卡)都需要从互联网加载数据并显示它。

如果我正在加载数据 onCreate 并填充它然后切换到另一个选项卡并返回我有空视图。

TextView emailView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View convertView = inflater.inflate(R.layout.contactdetails_pro, container, false);

    emailView = (TextView) convertView.findViewById(R.id.contactdetails_info_email);

    return convertView;
}


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String id = getArguments().getString("id");

    MyTask pdthread = new MyTask(this.getActivity(), id, new AsyncTaskCompleteListener() {
        @Override
        public void onComplete(Detail detail) {
            emailView.setText(detail.getEmail());
        }
    });
    pdthread.execute();
}
4

1 回答 1

0

我不熟悉,FragmentTabHost但你可以试试这个(注意:你可能必须让Detail类实现Serializable):

Detail mDetail = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String id = getArguments().getString("id");

    if (savedInstanceState == null) {
        MyTask pdthread = new MyTask(this.getActivity(), id, new AsyncTaskCompleteListener() {
            @Override
            public void onComplete(Detail detail) {
                mDetail = detail;
                emailView.setText(mDetail.getEmail());
            }
        });
        pdthread.execute();
    } else {
        mDetail = (Detail)savedInstanceState.getSerializable("detail");
        if (mDetail ! = null) {
            emailView.setText(detail.getEmail());
        }
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putSerializable("detail", mDetail);
}
于 2013-06-16T00:22:57.340 回答