В настоящее время я создаю приложение, использующее соединение Bluetooth. Соединение обрабатывается внутри простого объекта (HandleConnection). Когда соединение выполняется, мое приложение переходит в «удаленный» режим, что означает, что я заменяю свой основной фрагмент другим (RemoteFragment), который использует объект «HandleConnection».Фрагмент сбрасывается после изменения конфигурации
Пока все не будет хорошо, так как в конце моего «OnCreate» (в моей деятельности) я установил атрибут handleConnection в RemoteFragment в:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
if (savedInstanceState == null) {
retainedFragment = new RetainedFragment();
getFragmentManager().beginTransaction().add(retainedFragment, RetainedFragment.class.toString()).commit();
handleConnection = new HandleConnection(this, handler);
retainedFragment.setHandleConnection(handleConnection);
} else {
remoteFragment = (RemoteFragment) getFragmentManager().findFragmentByTag(RemoteFragment.class.toString());
retainedFragment = (RetainedFragment) getFragmentManager().findFragmentByTag(RetainedFragment.class.toString());
if (remoteFragment == null)
remoteFragment = new RemoteFragment();
handleConnection = retainedFragment.getHandleConnection();
remoteFragment.setHandleConnection(handleConnection);
}
fragmentTransaction.commit();
}
Все хорошо, за исключением, когда я превращаюсь в ландшафтном режиме работает. Затем (после игры в режиме отладки) кажется, что мой RemoteFragment воссоздан после вызова моего сеттера, что, очевидно, означает, что мой атрибут handleConnection равен null. Почему это так? Я бы понял, если бы я не использовал предыдущий фрагмент (тогда у меня было бы два разных фрагмента друг на друга), но в этом случае он не имеет смысла. Я сделал обходное решение, вызвав функцию обратного вызова внутри onCreateView, чтобы получить объект HandleConnection, но почему атрибут должен быть нулевым, когда я вызывал сеттер раньше?
Спасибо!
Да, но поскольку я вызываю '' '' remoteFragment.setHandleConnection (handleConnection); '' '' remoteFragment не должен иметь нулевой указатель при вводе onCreateView? – pLesur
В вашем другом состоянии, когда вы вызываете «handleConnection = сохраненныйFragment.getHandleConnection();» этот дескриптор Connection null? Я думаю, это нулевое значение. Перед установкой этого параметра на «remoteFragment» вы должны провести проверку недействительности. – Sabeeh
Нет, соединение handleConnection не равно нулю. Я использовал шаблон RetainedFragment, упомянутый в документе android doc: [link] (http://developer.android.com/guide/topics/resources/runtime-changes.html) – pLesur