2014-11-02 2 views
4

Я использую эту библиотеку для использования клавиатуры emoji в своем приложении. https://github.com/ankushsachdeva/emojiconКак получить rootview в фрагменте?

В Readme указано, что для инициализации всплывающего окна должен использоваться самый верхний вид иерархии макетов активности.

Мое приложение реализовано через фрагменты.

Это код, я использую для тестирования:

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

    View view = inflater.inflate(R.layout.overview1_layout, container, 
      false); 

    // Give the topmost view of your activity layout hierarchy. This will be used to measure soft keyboard height 
    EmojiconsPopup popup = new EmojiconsPopup(view, getActivity()); 

    //Will automatically set size according to the soft keyboard size   
    popup.setSizeForSoftKeyboard(); 

    popup.showAtBottom(); 


    return view; 
} 

Если я запускаю этот код я получаю следующее сообщение об ошибке в LogCat:

11-02 22:37:16.685: E/AndroidRuntime(30363): java.lang.RuntimeException: Unable to resume activity {com.Testing.full/com.Testing.full.MainActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 

EDIT: Я использую SherlockFragment

+0

getActivity() GetWindow() getDecorView() getRootView()...; –

ответ

3

сохранить в качестве примера член fragment и инициализировать всплывающее окно Emojicons в OnViewCreated метод. Это может решить вашу проблему.

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

View view = inflater.inflate(R.layout.overview1_layout, container, 
     false); 

this.view = view 

return view; 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

// Give the topmost view of your activity layout hierarchy. This will be used to measure soft keyboard height 
EmojiconsPopup popup = new EmojiconsPopup(view, getActivity()); 




//Will automatically set size according to the soft keyboard size   
popup.setSizeForSoftKeyboard(); 

popup.showAtBottom(); 
} 

Но для названия вопроса - проверить here

+0

Он продолжает сбой с той же ошибкой. Я также попытался использовать view.getRootView() – tobias

+0

вы могли бы попробовать сделать это изнутри действия, чтобы узнать, остается ли исключение? – Heisenberg

+0

Он также выходит из строя, если я добавлю код в метод onCreate активности. Что я делаю не так? – tobias

0

В onStart() из Fragment или других колбеков-методов после onCreateView вызова:

emojiconsPopup = new EmojiconsPopup(**getView()**, getActivity()); 
emojiconsPopup.setSizeForSoftKeyboard(); 

альтернатива:

emojiconsPopup = new EmojiconsPopup( getView().getRootView() , getActivity()); 
emojiconsPopup.setSizeForSoftKeyboard(); 
Смежные вопросы