2013-03-04 3 views
0

Я пытаюсь создать экземпляр адаптера пользовательского списка.Активация адаптера пользовательского списка внутри фрагмента

Адаптер:

private class ProverbAdapter extends ArrayAdapter<String> { 
    public ProverbAdapter(Context context, int layout, int resId, String[] items) { 
     super(context, layout, resId, items); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     if(row == null) { 
      row = getLayoutInflater().inflate(R.layout.proverb_layout, parent, false); 
     } 

     String item = getItem(position); 

     return row; 
    } 
} 

Инстанцирование

Context c = getActivity().getApplicationContext(); 
ProverbAdapter adapter = new ProverbAdapter(c,R.layout.proverb_layout,R.id.proverb_content,all_proverbs); 

Я получаю сообщение об ошибке от компилятора, который говорит

Отсутствует тип вшита из MainActivity не доступен , Должен квалифицировать выделение с помощью экземпляра типа MainActivity.

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

+0

Где ваш экземпляр ProverbAdapter? – Sam

+0

Он создается внутри onCreateView(), внутри обратного вызова для набора результатов анализа. –

ответ

2

У вас есть два варианта:

  1. сделать ваш ProverbAdapter статичным: private static class ProverbAdapter
  2. Instantiate ваш ProverbAdapter внутри экземпляра MainActivity.

Это связано с тем, что нестатические внутренние классы имеют ссылку на экземпляр их внешнего класса, поэтому вы можете легко получить доступ к методам и переменным этого внешнего класса. Если вы не создаете экземпляр внутреннего класса внутри экземпляра внешнего класса, для этого внешнего класса нет ссылки.


Если вы сделаете ProverbAdapter статичным, вы получите сообщение об ошибке на getLayoutInflater(). Статические внутренние классы не могут получить доступ к методам или переменным из внешнего класса. Вы можете решить эту проблему, позвонив по телефону LayoutInflater.from(getContext());.

+0

Спасибо! Хотелось бы, чтобы я дважды голосовал за это, чтобы ответить на этот вопрос, а затем ответил на проблему, вызванную первым решением. –