在可扩展列表子项单击中显示 Toast 时出错

Error on showing Toast in ExpandableList child item click

我在 Fragment 中使用扩展 BaseExpandableListAdapter 的 ExpandableListView,并在 ViewPager 中显示它。单击它时,我试图显示子项的每个 TextView 的文本。我不知道为什么当我按下一个子项目时它会关闭应用程序。有人可以帮我吗?非常感谢!

这是我的片段和适配器:

public class SavedTabsFragment extends Fragment {

    private ArrayList<String> parentItems = new ArrayList<>();
    private ArrayList<Object> childItems = new ArrayList<>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_explistview, null);
        ExpandableListView elv = (ExpandableListView) v.findViewById(R.id.expandableListView1);

        elv.setGroupIndicator(null);
        elv.setClickable(true);
        setGroupParents();
        setChildData();

        SavedTabsListAdapter adapter = new SavedTabsListAdapter(parentItems, childItems);
        adapter.setInflater((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE), this);
        elv.setAdapter(adapter);

//        elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
//            @Override
//            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
//                Toast.makeText(getActivity()," holaaa",Toast.LENGTH_SHORT).show();
//
//                return false;
//            }
//        });

        return v;

    }

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        //TODO
    }

    public static SavedTabsFragment newInstance(){
        SavedTabsFragment savedTabsFragment = new SavedTabsFragment();
        Bundle args = new Bundle();
        //TODO info del bundle
        return savedTabsFragment;
    }

    public void setGroupParents() {
        parentItems.add("Androwwid");
        parentItems.add("Core Java");
        parentItems.add("Desktop Java");
        parentItems.add("Enterprise Java");
    }

    public void setChildData() {

        // Android
        ArrayList<String> child = new ArrayList<>();
        child.add("Core");
        child.add("Games");
        childItems.add(child);

        // Core Java
        child = new ArrayList<>();
        child.add("Apache");
        child.add("Applet");
        child.add("AspectJ");
        child.add("Beans");
        child.add("Crypto");
        childItems.add(child);

        // Desktop Java
        child = new ArrayList<>();
        child.add("Accessibility");
        child.add("AWT");
        child.add("ImageIO");
        child.add("Print");
        childItems.add(child);

        // Enterprise Java
        child = new ArrayList<>();
        child.add("EJB3");
        child.add("GWT");
        child.add("Hibernate");
        child.add("JSP");
        childItems.add(child);
    }

    public class SavedTabsListAdapter extends BaseExpandableListAdapter {

        private ArrayList<String> parentItems, child;
        private ArrayList<Object> childItems;
        private LayoutInflater inflater;
        private Activity activity;

        public SavedTabsListAdapter(ArrayList<String> parentItems, ArrayList<Object> childItems) {
            this.childItems = childItems;
            this.parentItems = parentItems;
        }

        public int getGroupCount() {
            return parentItems.size();
        }

          public int getChildrenCount(int i) {
               return ((ArrayList<String>) childItems.get(i)).size();
        }

        public Object getGroup(int i) {
            return parentItems.get(i);
        }

        public Object getChild(int i, int i1) {
            return null;
        }

        public long getGroupId(int i) {
            return 0;
        }

        public long getChildId(int i, int i1) {
            return 0;
        }

        public boolean hasStableIds() {
            return false;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
               if (convertView == null) {
                convertView = inflater.inflate(R.layout.row, null);
            }

            ((CheckedTextView) convertView).setText(parentItems.get(groupPosition));
            ((CheckedTextView) convertView).setChecked(isExpanded);


            return convertView;
        }
                          @Override
        public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            child = (ArrayList<String>) childItems.get(groupPosition);

            TextView textView = null;

            if (convertView == null) {
                convertView = inflater.inflate(R.layout.group, null);
            }
            textView = new TextView(SavedTabsFragment.this.getActivity());
            textView = (TextView) convertView.findViewById(R.id.textView1);
            textView.setText(child.get(childPosition));

            textView.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                    Toast.makeText(activity, child.get(childPosition)+" holaaa",
                            Toast.LENGTH_SHORT).show();
                }
            });




            return convertView;
        }


        @Override
        public boolean isChildSelectable(int i, int i1) {
            return true;
        }

        @Override
        public void onGroupCollapsed(int groupPosition) {
            super.onGroupCollapsed(groupPosition);
        }

        @Override
        public void onGroupExpanded(int groupPosition) {
            super.onGroupExpanded(groupPosition);
        }

        public void setInflater(LayoutInflater inflater, SavedTabsFragment savedTabsFragment) {
            this.inflater = inflater;
//            this = savedTabsFragment;
        }
            }
}

这是我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout_fragment_exp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ExpandableListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/expandableListView1"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"

        android:cacheColorHint="@android:color/transparent"
        android:divider="@android:color/transparent"
        android:dividerHeight="20dp"
        android:childDivider="@android:color/transparent"
        android:scrollbarStyle="outsideOverlay"
        android:paddingBottom="7dp"
        android:paddingLeft="9dp"
        android:paddingRight="9dp"
        android:paddingTop="10dp"
        />

</RelativeLayout>

编辑:

这是 logcat 消息:

05-08 11:58:12.395  18706-18706/com.example.julio.listviewactionbar E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.julio.listviewactionbar, PID: 18706
    java.lang.NullPointerException
            at android.widget.Toast.<init>(Toast.java:93)
            at android.widget.Toast.makeText(Toast.java:241)
            at com.example.julio.listviewactionbar.SavedTabsFragment$SavedTabsListAdapter.onClick(SavedTabsFragment.java:245)
            at android.view.View.performClick(View.java:4569)
            at android.view.View$PerformClick.run(View.java:18570)
            at android.os.Handler.handleCallback(Handler.java:743)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5196)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
            at dalvik.system.NativeStart.main(Native Method)

使用OnItemClickListener,而不是OnChildClickListener

我认为 activity 为空。你为什么不像下面这样在 toast 方法中传递 getActivity'。

  Toast.makeText(getActivity(), child.get(childPosition)+" holaaa",
                        Toast.LENGTH_SHORT).show();