2015-02-04 2 views
0

Я просмотрел большинство вопросов, которые я смог найти для решения этого вопроса, но ни одна из предложений не показалась моей проблемой. Я пробовал очистить и восстановить проект и перезапустить Android-студию. убедитесь, что раздувание сделано до того, как я попытаюсь извлечь элементы пользовательского интерфейса, и я попытался использовать findViewById несколько разных методов. Вот как я думаю, что это должно быть (но все равно не работает). Я также попытался получить другое представление в родительской активности на Create после совершения транзакции фрагмента. Также безуспешно.findViewById возвращает null (еще раз)

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    View v = inflater.inflate(R.layout.search_fragment,container,false); 

    seekBarDuration = (SeekBar) getActivity().findViewById(R.id.seekBarDuration); 
    return v; 
} 

@Override 
public void onActivityCreated (Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    seekBarDuration.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

Приложение аварийно завершает работу в последней строке, поскольку seekBarDuration является пустой ссылкой. Seekbar находится в собственном макете фрагмента.

ответ

2

Привет вы пытаетесь получить его от деятельности когда вы заявили, что ваша точка зрения на фрагмент ` , измените свой код на это.

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     View v = inflater.inflate(R.layout.search_fragment,container,false); 

     seekBarDuration = (SeekBar) v.findViewById(R.id.seekBarDuration); 
//Also set listener in here since seekBarDuration is on the Fragment not in Activity 
    seekBarDuration.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {}); 


     return v; 
    } 

    @Override 
    public void onActivityCreated (Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    //This is called when the Activity is created, not the fragment. 
} 

Я также изменил, где вы установите listener вы можете либо оставить его внутри @onCreateView или сделать Fragmentреализовать его и установить его как seekBarDuration.setOnSeekbarChangeListener(this);

Надеется, что это помогает.

Дополнительная информация о Documentation

4

Не называть findViewById() по телефону getActivity() в onCreateView(). Назовите его на View, который вы просто надули.

IOW заменить:

seekBarDuration = (SeekBar) getActivity().findViewById(R.id.seekBarDuration); 

с:

seekBarDuration = (SeekBar) v.findViewById(R.id.seekBarDuration); 
Смежные вопросы