Ошибка при заполнении счетчика во фрагменте - PullRequest
3 голосов
/ 19 февраля 2012

У меня есть активность с двумя фрагментами. У одного из них есть вертушка. Когда я заполняю его, приложение вылетает. Я не знаю почему. В разработчиках Android запутано, как это делается фрагментарно, кажется, что оно отличается от обычной активности.

Спасибо!

public class InstrumentsFrag extends Fragment {

TextView tv1;
Spinner sp;

String[] os = {"Cupcake v1.5", "Donut v1.6", "Éclair v2.0/2.1", "Froyo v2.2",
        "Gingerbread v2.2", "Honeycomb v3.0/3.1"};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    return inflater.inflate(R.layout.instruments, container, false);

}
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        sp = (Spinner) getActivity().findViewById(
                R.id.spinner1);

        ArrayAdapter <CharSequence>adapter = ArrayAdapter.createFromResource( getActivity(), R.array.sections , android.R.layout.simple_spinner_item); 
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(adapter);
 }

1 Ответ

11 голосов
/ 17 октября 2012

У меня была такая же проблема, когда мое приложение зависало при заполнении счетчика.В моем случае бланк, который я заполнял, был определен в XML-файле фрагмента, поэтому хитрость заключалась в том, чтобы найти FindViewById ().Я вижу, в вашем случае вы пытались использовать getActivity ():

sp = (Spinner) getActivity().findViewById(R.id.spinner1);

Я также пытался использовать оба getActivity () и getView (), и оба вызвали сбои (нулевой спиннер и исключение NULL Pointer соответственно).

Я наконец заставил это работать, заменив getActivity () на представление фрагмента.Я сделал это, заполнив счетчик, когда вызывается onCreateView ().Вот некоторые фрагменты из моего окончательного кода:

private Spinner spinner;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
  View view = inflater.inflate(R.layout.myFragmentXmlFile, container, false);
  // Now use the above view to populate the spinner.
  setSpinnerContent( view );
  ...
}

private void setSpinnerContent( View view )
{
  spinner = (Spinner) view.findViewById( R.id.mySpinner );
  ...
  spinner.setAdapter( adapter );
  ...
}

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...