0

我正在创建具有多个带有滑动手势的选项卡的 Android 启动器,以从一个片段到另一个片段我的所有屏幕都工作得很好,除了 ShelfViewActivity (即使它说活动是一个片段)一切正常但是当我滚动到 ShelfViewActivity 启动器崩溃。我这里有 logcat 以及课程。错误出现在第 35 行我认为....我已经评论了第 35 行的位置。我不知道我做错了什么我还在学习所以请不要判断

日志猫:

11-12 05:30:55.337: E/AndroidRuntime(3889): FATAL EXCEPTION: main
11-12 05:30:55.337: E/AndroidRuntime(3889): java.lang.NullPointerException
11-12 05:30:55.337: E/AndroidRuntime(3889):     at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
11-12 05:30:55.337: E/AndroidRuntime(3889):     at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
11-12 05:30:55.337: E/AndroidRuntime(3889):     at com.d4a.tobias.ShelfViewActivity$VerticalAdapter.<init>(ShelfViewActivity.java:51)
11-12 05:30:55.337: E/AndroidRuntime(3889):     at com.d4a.tobias.ShelfViewActivity.<init>(ShelfViewActivity.java:35)
11-12 05:30:55.337: E/AndroidRuntime(3889):     at it.gmariotti.android.examples.googleaccount.MainFrag$MyAdapter.getItem(MainFrag.java:80)
11-12 05:30:55.337: E/AndroidRuntime(3889):     at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:95)

ShelfViewActivity.java

package com.d4a.tobias;

import java.util.ArrayList;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class ShelfViewActivity extends ListFragment {
    /** Called when the activity is first created. */
    private VerticalAdapter verListAdapter;

    @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.main, container, false);
    }   

        /*
         * Calling Library & BookItem classes for create list of groups
         *  groupbyArrayBookItem return back array of array of items
         */
        Library lb = new Library();{
        for (BookItem item : BookItem.ALL_BOOKS) {
            lb.addBookItem(item);
        }
        ArrayList<ArrayList<BookItem>> groupList = new ArrayList<ArrayList<BookItem>>();
        groupList = lb.groupbyArrayBookItem(Library.AUTHOR);

        verListAdapter = new VerticalAdapter(getActivity(), R.layout.bookrow, groupList);  //line 35
        setListAdapter(verListAdapter);

        verListAdapter.notifyDataSetChanged();
    }

    /**
     * This class add a list of ArrayList to ListView that it include multi
     * items as bookItem.
     */
    private class VerticalAdapter extends ArrayAdapter<ArrayList<BookItem>> {

        private int resource;

        public VerticalAdapter(Context _context, int _ResourceId,
                ArrayList<ArrayList<BookItem>> _items) {
            super(_context, _ResourceId, _items);
            this.resource = _ResourceId;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View rowView;

            if (convertView == null) {
                rowView = LayoutInflater.from(getContext()).inflate(resource,
                        null);
            } else {
                rowView = convertView;
            }

            HorizontalListView hListView = (HorizontalListView) rowView
                    .findViewById(R.id.subListview);
            HorizontalAdapter horListAdapter = new HorizontalAdapter(
                    getContext(), R.layout.item, getItem(position));
            hListView.setAdapter(horListAdapter);

            return rowView;
        }
    }

    /*
     * This class add some items to Horizontal ListView this ListView include
     * several bookItem.
     */
    private class HorizontalAdapter extends ArrayAdapter<BookItem> {

        private int resource;

        public HorizontalAdapter(Context _context, int _textViewResourceId,
                ArrayList<BookItem> _items) {
            super(_context, _textViewResourceId, _items);
            this.resource = _textViewResourceId;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View retval = LayoutInflater.from(getContext()).inflate(
                    this.resource, null);

            TextView topText = (TextView) retval.findViewById(R.id.title);
            TextView bottomText = (TextView) retval
                    .findViewById(R.id.author);

            topText.setText(getItem(position).getAuthor());
            bottomText.setText(getItem(position).getTitle());

            return retval;
        }
    }
}

任何帮助都会很棒

提前感谢!

4

1 回答 1

0

尝试改变这个:

 @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.main, container, false);
}   

    /*
     * Calling Library & BookItem classes for create list of groups
     *  groupbyArrayBookItem return back array of array of items
     */
    Library lb = new Library();{
    for (BookItem item : BookItem.ALL_BOOKS) {
        lb.addBookItem(item);
    }
    ArrayList<ArrayList<BookItem>> groupList = new ArrayList<ArrayList<BookItem>>();
    groupList = lb.groupbyArrayBookItem(Library.AUTHOR);

    verListAdapter = new VerticalAdapter(getActivity(), R.layout.bookrow, groupList);  //line 35
    setListAdapter(verListAdapter);

    verListAdapter.notifyDataSetChanged();
}

对此:

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

    /*
     * Calling Library & BookItem classes for create list of groups
     *  groupbyArrayBookItem return back array of array of items
     */
    Library lb = new Library();{
    for (BookItem item : BookItem.ALL_BOOKS) {
        lb.addBookItem(item);
    }
    ArrayList<ArrayList<BookItem>> groupList = new ArrayList<ArrayList<BookItem>>();
    groupList = lb.groupbyArrayBookItem(Library.AUTHOR);

    verListAdapter = new VerticalAdapter(getActivity(), R.layout.bookrow, groupList);  //line 35
    setListAdapter(verListAdapter);

    verListAdapter.notifyDataSetChanged();
    return rootView;
}
于 2013-11-12T05:54:40.143 回答