2014-02-11 2 views
0

У меня есть деятельность в ней я делаюAndroid возвращает фрагмент находкой обнулить всегда

FragmentTransaction trans = getFragmentManager().beginTransaction(); 

    FragmentList fragList = new FragmentList(); 
    trans.replace(R.id.fragList, fragList, "fragList"); 

, чтобы заполнить мой макет кадра с реальным фрагментом. Это прекрасно работает. Через навигацию я заканчиваю позже в некоторой другой деятельности и другом фрагменте. В этом новом фрагменте я должен вызвать метод своего фрагмента списка, чтобы сказать, что что-то изменилось.

FragmentList listfrag = (FragmentList) getFragmentManager().findFragmentByTag("fragList"); 
FragmentList listfrag2 = (FragmentList) getFragmentManager().findFragmentById(R.id.fraglist); 
listfrag.updateData(b); 

Оба, listfrag и listfrag2, всегда равны нулю. Зачем?

Edit:

на основе ответа, что это не возможно, от одного вида деятельности на другой вид деятельности. У меня есть активность A, На планшете A есть фрагмент F1 и F2, на телефоне только F1. Если я выберу что-то в F1, либо F2 обновится, либо вызывается активность B, чтобы показать F2. В F2 я нажимаю кнопку сохранения, и я хочу обновить F1. Поэтому я либо должен называть что-то в той же самой деятельности (планшет), либо в другой acitivty (телефон). Как я могу это сделать без дублирования моего кода для обновлений?

ответ

0

Метод getFragmentManager() получает ссылку на FragmentManager, который используется в , что активность.

По сути, вы создаете фрагмент в одной деятельности, но ищете его в другом. Вы не можете сделать это (легко).

Похоже, что вы можете использовать startActivityForResult() и onActivityResult() для передачи данных взад и вперед между Акциями.

0

Жизненный цикл фрагмента привязан к его деятельности, вы не можете назвать его из другого вида деятельности. Но в той же деятельности, когда вы заменить с другим фрагментом,

Попробуйте это,

trans 
    .replace(R.id.fragList, fragList, "fragList") 
    .addToBackStack(null) // this will keep fragment when you replace with another. 
    .commit(); 
Смежные вопросы