Я пытаюсь заполнить свой списокView адаптером настраиваемого массива, который я создал. В результате я хочу иметь изображение с левой стороны и две метки справа.Android fill listView с пользовательским ArrayAdapter
Когда я добираюсь до фрагмента, который должен отображать listView, приложение падает, но я не могу понять почему. Ошибка java.lang.IllegalStateException: System services not available to Activities before onCreate()
.
Вот мой код:
фрагмент:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getActivity().setTitle("Inbox");
myView = inflater.inflate(R.layout.inbox_layout, container, false);
ListView list = (ListView) myView.findViewById(R.id.listViewMyAccount);
inboxCellElement[] elts = new inboxCellElement[] {new inboxCellElement(R.drawable.ic_menu_camera, "Val", "Hi !")};
list.setAdapter(new inboxCellAdapter(new NavDrawer(), R.layout.inbox_cell_layout, elts, (NavDrawer) getActivity()));
return myView;
}
Объект, содержащий данные для передачи в ListView:
public class inboxCellElement {
private String name = "", message = "";
private int imgId = 0;
public inboxCellElement(int imgId, String name, String message){
this.imgId = imgId;
this.name = name;
this.message = message;
}
public int getImgId() { return imgId; }
public String getName() { return name; }
public String getMessage() { return message; }
}
Обычай адаптер:
public class inboxCellAdapter extends ArrayAdapter {
inboxCellElement[] elts;
NavDrawer navDrawer;
// constructor
public inboxCellAdapter(Context context, int resource, Object[] objects, NavDrawer navDrawer) {
super(context, resource, objects);
elts = (inboxCellElement[]) objects;
this.navDrawer = navDrawer;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyHolder holder = null;
LayoutInflater inflater = new NavDrawer().getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.inbox_cell_layout, null, false);
holder = new MyHolder(convertView);
convertView.setTag(holder);
}
else {
holder = (MyHolder) convertView.getTag();
}
holder.getUpperText().setText(elts[position].getName());
holder.getLowerText().setText(elts[position].getMessage());
holder.getImage().setImageResource(elts[position].getImgId());
return convertView;
}
private class MyHolder {
private View row;
private TextView upperText = null, lowerText = null;
private ImageView img = null;
public MyHolder(View row) {
this.row = row;
}
public TextView getUpperText() {
if (this.upperText == null) {
this.upperText = (TextView) navDrawer.findViewById(R.id.inboxCellName);
}
return this.upperText;
}
public TextView getLowerText() {
if (this.lowerText == null) {
this.lowerText = (TextView) navDrawer.findViewById(R.id.inboxCellMessage);
}
return this.lowerText;
}
public ImageView getImage() {
if (this.img == null) {
this.img = (ImageView) navDrawer.findViewById(R.id.inboxCellImg);
}
return this.img;
}
}
}
Кажется, при ошибке приходит из нескольких звонков navDrawer.findViewById(...)
, но я понятия не имею, как это исправить. Может ли кто-нибудь подтвердить, что ошибка происходит здесь, почему и помочь мне ее исправить? Благодаря
EDIT: Добавление StackTrace
--------- начало аварии
04-12 14:32:58.816 2128-2128/t2g.com.travel2gather E/AndroidRuntime: FATAL EXCEPTION: main
Process: t2g.com.travel2gather, PID: 2128
java.lang.IllegalStateException: System services not available to Activities before onCreate()
at android.app.Activity.getSystemService(Activity.java:5253)
at android.view.LayoutInflater.from(LayoutInflater.java:229)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:178)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:137)
at t2g.com.travel2gather.adapters.inboxCellAdapter.<init>(inboxCellAdapter.java:0)
at t2g.com.travel2gather.inboxFragment.onCreateView(inboxFragment.java:30)
at android.app.Fragment.performCreateView(Fragment.java:2220)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
at android.app.BackStackRecord.run(BackStackRecord.java:793)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:482)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
вы можете разместить полную трассировку стека? –
Я добавил его в конце сообщения – Dliix
Вы когда-нибудь вызывали 'getSystemService (Context.CONNECTIVITY_SERVICE);'? –