Сохранение фрагментов с помощью сохраненного экземпляра состояния - PullRequest
0 голосов
/ 29 февраля 2012

saveInstanceState() не работает должным образом.
Я пытаюсь прочитать данные, поэтому мне не нужно делать запрос снова, когда пользователь повторно выбирает вкладку. Фрагмент представляет собой вкладку в панели действий. Все работает правильно, я просто не могу сохранить saveInstanceState чем-то еще, кроме NULL, у кого-нибудь есть идеи?

Это мой код:

public class SpecsFragment extends Fragment {
    private String mText;
    private ArrayList<HashMap> result;
    private Converter c;
    private View fragView;

public SpecsFragment() {
    mText = "specs";
    c = new Converter();
}


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

    super.onCreate(savedInstanceState);
    fragView = inflater.inflate(R.layout.product_info_fragment, container, false);

    return fragView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {

    super.onActivityCreated(savedInstanceState);

    if(savedInstanceState == null) {

        Bundle args = getArguments();
        int id = Integer.parseInt(args.getString("id"));

        String query = "SELECT * FROM products WHERE id = " + id;

        try {
            ZoekQueryTask zoekQueryTask = new ZoekQueryTask(query);
            result = zoekQueryTask.getResults();
        }

        catch (Exception e) {
            Log.e("Afgevangen error", e.getMessage());
        }
    }
    else {
        result = new ArrayList();
        result.add((c.BundleToHashMap(savedInstanceState)));
    }

    TextView text = (TextView) fragView.findViewById(R.id.textView1);
    text.setText(mText);
    text.append("\n\n");
    text.append(result.get(0).get("ean").toString());
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState = c.HashmapToBundle(result.get(0));
}

}

Использование

savedInstance.putAll(c.HashmapToBundle(result.get(0)));

Все еще не работает.

savedInstance.putBundle("results", c.HashmapToBundle(result.get(0)));

Не работает, у кого-нибудь есть идеи?

Я решил проблему , обойдя ее, вместо того, чтобы пытаться сохранить savedInstanceState. Я написал функции для получения и установки Bundle из родительского действия фрагментов, а затем получил действие с помощью:

YourActivity parent = (YourActivity) this.getactivity();

И просто вызовите функцию для получения и установки пакета, который вы пишете сами.

Ответы [ 2 ]

1 голос
/ 07 мая 2012

I решил проблему, обходя ее, вместо того, чтобы пытаться сохранить сохраненный экземпляр состояния.Я написал функции для получения и установки Bundle из родительского действия фрагментов, а затем получил действие с помощью:

YourActivity parent = (YourActivity) this.getactivity(); 

И просто вызвал функцию для получения и установки пакета, который вы пишете сами

0 голосов
/ 24 марта 2012

Если ваш фрагмент определен в макете XML, убедитесь, что вы указали android: id!

...