2016-03-07 5 views
0

UPDATE: Просто для уточнения, show() является метод android.app.DialogFragment «s, что я не переписывал:findFragmentByTag() возвращает нулевое

public void show(FragmentManager manager, String tag) { 
    mDismissed = false; 
    mShownByMe = true; 
    FragmentTransaction ft = manager.beginTransaction(); 
    ft.add(this, tag); 
    ft.commit(); 
} 

Мы называем следующее, где MyDialog расширяет DialogFragment:

MyDialog dialog = new MyDialog(); 
    dialog.show(getFragmentManager(), MyDialog.TAG); 

    Fragment f = getFragmentManager().findFragmentByTag(MyDialog.TAG); 

Но f всегда null. Зачем?

+0

У вас есть фрагмент с тем же тегом? –

+1

Просьба указать код метода show() в классе MyDialog. –

+0

@AritraRoy добавлен. – shebang

ответ

0

FindFragmentByTag возвращает фрагмент, если он найден, или null в противном случае.

+0

Конечно. вопрос в том, почему он не может найти недавно добавленный фрагмент. – shebang

+0

@shebang вы должны добавить весь свой код – dnkilic

0

добавить тег с фрагментом

Fragment fragmentA = new FragmentA(); 
getFragmentManager().beginTransaction() 
    .replace(R.id.container,f,MyDialog.TAG) 
    .commit(); 

и получить

Fragment f = getFragmentManager().findFragmentByTag(MyDialog.TAG); 
+0

можете ли вы объяснить, как это отличается от того, что делает 'show()'? то есть, как 'replace()' «лучше», чем 'add()' – shebang

+0

, посетите этот http://stackoverflow.com/questions/18634207/difference-between-add-replace-and-addtobackstack –

0

Вопрос прост, DialogFragment.show использует FragmentTransaction.commit, который работает асинхронно. Таким образом, он будет отображаться только на следующей итерации основного потока. Чтобы решить эту проблему, просто добавьте эту строку в свой код ...

MyDialog dialog = new MyDialog(); 
dialog.show(getFragmentManager(), MyDialog.TAG); 

// Run this line before trying to search for the fragment. 
getFragmentManager().executePendingTransactions(); 

Fragment f = getFragmentManager().findFragmentByTag(MyDialog.TAG); 
Смежные вопросы