java - 需要帮助解决 ExpandableListView 中的 IndexOutOfBoundsException

标签 java android arraylist

我一直在谷歌上搜索类似的问题,但我根本无法弄清楚是什么导致了我的错误(我知道错误在哪里,但我不知道如何通过代码解决它)。我知道我可能会得到一些对此感到不满,但如果有人可以帮助我提供代码解决方案,我将非常感激!

我的 ExpandableListViewAdapter:

public class ExpandableListAdapter extends BaseExpandableListAdapter {

    private Context context;
    private List<String> listDataHeader;
    private ArrayList<ArrayList<Question>> listDataChild;
    private LayoutInflater inflater;

    public ExpandableListAdapter(Context context, List<String> listDataHeader,
                                 ArrayList<ArrayList<Question>> listChildData) {
        this.context = context;
        this.listDataHeader = listDataHeader;
        this.listDataChild = listChildData;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return listDataChild.get(groupPosition).get(childPosition);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        View view = null;

        if (convertView != null)
            view = convertView;

        else
            view = inflater.inflate(R.layout.list_item, parent, false);
        Question question = (Question) getChild(groupPosition, childPosition);
        TextView txtviewquestion = (TextView) view.findViewById(R.id.question);

        if (txtviewquestion != null)
            txtviewquestion.setText(question.getQuestion());

        //***TITTA NÄRMARE PÅ KNAPPARNA******
        //Button btnPositive = (Button)view.findViewById( R.id.BtnPositive );
        //btnPositive.setChecked( c.getState() );
        //Button btnNegative = (Button)view.findViewById( R.id.BtnNegative );
        //btnNegative.setChecked( c.getState() );
        return view;
    }


    @Override
    public int getChildrenCount(int groupPosition) {
        return listDataChild.get(groupPosition).size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return this.listDataHeader.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return this.listDataHeader.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        View view = null;
        //String headerTitle = (String) getGroup(groupPosition);

        if (convertView != null) {
            view = convertView;
        } else
            view = inflater.inflate(R.layout.list_group, parent, false);
        String getgroup = (String) getGroup(groupPosition);
        TextView questiongroup = (TextView) view.findViewById(R.id.lblListHeader);

        if (getgroup != null)
            questiongroup.setText(getgroup);


        /**
         if (convertView == null) {
         LayoutInflater infalInflater = (LayoutInflater) this.context
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         convertView = infalInflater.inflate(R.layout.list_group, null);
         }

         TextView lblListHeader = (TextView) convertView
         .findViewById(R.id.lblListHeader);
         lblListHeader.setTypeface(null, Typeface.BOLD);
         lblListHeader.setText(headerTitle);

         return convertView;
         **/
        return view;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    public void onGroupCollapsed(int groupPosition) {
    }

    public void onGroupExpanded(int groupPosition) {
    }
}

我的 Activity 类别:

public class QuestionsActivity2 extends ExpandableListActivity {


    private static final String LOG_TAG = "QuestionActivity2";
    private ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    List<String> listDataHeader;
    //HashMap<String, List<String>> listDataChild;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mek_list_layout);

        ArrayList<String> groupNames = new ArrayList<String>();
        groupNames.add("TÄNK IGENOM UPPDRAGET");
        groupNames.add("IDENTIFIERA FAROR I UPPDRAGET");
        //*****SE ÖVER OM ARRAYEN SKA VARA AV QUESTION OBJEKT*****
        ArrayList<ArrayList<Question>> questions = new ArrayList<ArrayList<Question>>();
        ArrayList<Question> question = new ArrayList<Question>();
        question.add(new Question("Har jag klart för mig vad uppdraget innebär?", false));
        question.add(new Question("Har jag klart för mig hur jag tar mig till arbetsplatsen säkert?", false));
        question.add(new Question("Har jag klart för mig vilka arbetsmoment som ingår i uppdraget?", false));
        question.add(new Question("Har jag klart för mig vad som behöver brytas och låsas avs el, hydraulik, pneumatik och vatten?", false));
        question.add(new Question("Har jag kommunicerat med kontaktman samt berörda operatörer och ledningen?", false));
        question.add(new Question("Har jag tillgång till instruktioner och tagit del av de lokala skyddsföreskrifterna?", false));
        question.add(new Question("Har jag nödvändiga verktyg och tillstånd för uppdraget?", false));
        question.add(new Question("Har jag rätt personlig skyddsutrustning för uppdraget?", false));
        question.add(new Question("Behövs avspärring av det aktuella området?", true));
        questions.add(question); //<-------Added as solution
        question = new ArrayList<Question>();
        question.add(new Question("Riskerar jag att snubbla/halka/falla? Check underlag,skyddsräcken, trappor, trappsteg och arbetsplatformar", true));
        question.add(new Question("Påkörningsrisk, travers eller truck?", true));
        question.add(new Question("Har jag kontrollerat att all strömförsörjning är bruten och låst?", false));
        question.add(new Question("Har jag förvissat mig om att all hydraulik, pneumatik eller vattentryck är avlastade samt reglagen brutna och låsta?", false));
        question.add(new Question("Ensamarbete i så fall hur kommunicera?", true));
        question.add(new Question("Höghöjdsarbete?", true));
        question.add(new Question("Förekommer kemikalier/farliga ämnen och föreligger brandrisk?", true));
        question.add(new Question("Riskerar jag att påverkas av gas, ångor eller damm?", true));
        question.add(new Question("Riskerar jag att tappa eller få fallande föremål på mig?", true));
        question.add(new Question("Riskerar jag att bli fastklämd?", true));
        question.add(new Question("Riskerar jag att utsättas för buller och vibrationer?", true));
        question.add(new Question("Finns risk för elgenomströmning/-ljusbåge?", true));
        question.add(new Question("Förekommer tunga manuella lyft under uppdraget?", true));
        question.add(new Question("Finns risk för brännskada?", true));
        question.add(new Question("Riskerar jag att utsättas för stressmoment under arbetets gång?", true));
        questions.add(question); //<-------Added as solution

        listAdapter = new ExpandableListAdapter(this, groupNames, questions);
        setListAdapter(listAdapter);
    }

    public void onContentChanged() {
        super.onContentChanged();
        Log.d(LOG_TAG, "onContentChanged");
    }

    //****KANSKE NÅGOT FÖR KNAPPARNA? - WORK IN PROGRESS******
    public boolean onChildClick(ExpandableListView parent, View view, int groupPosition, int childPosition, long id) {

        Log.d(LOG_TAG, "onChildClick: " + childPosition);

        return false;
    }
}

LogCat 错误:

05-01 22:09:06.215: W/System.err(23939): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
05-01 22:09:06.215: W/System.err(23939):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
05-01 22:09:06.215: W/System.err(23939):    at java.util.ArrayList.get(ArrayList.java:304)
05-01 22:09:06.215: W/System.err(23939):    at com.example.ovakoappen.ExpandableListAdapter.getChildrenCount(ExpandableListAdapter.java:69)
05-01 22:09:06.215: W/System.err(23939):    at android.widget.ExpandableListConnector.refreshExpGroupMetadataList(ExpandableListConnector.java:567)
05-01 22:09:06.215: W/System.err(23939):    at android.widget.ExpandableListConnector.expandGroup(ExpandableListConnector.java:698)
05-01 22:09:06.215: W/System.err(23939):    at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:569)
05-01 22:09:06.215: W/System.err(23939):    at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:522)
05-01 22:09:06.215: W/System.err(23939):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3328)
05-01 22:09:06.215: W/System.err(23939):    at android.widget.AbsListView.onTouchEvent(AbsListView.java:4565)
05-01 22:09:06.215: W/System.err(23939):    at android.view.View.dispatchTouchEvent(View.java:7500)
05-01 22:09:06.215: W/System.err(23939):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2285)
05-01 22:09:06.215: W/System.err(23939):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2013)
05-01 22:09:06.215: W/System.err(23939):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2291)
05-01 22:09:06.215: W/System.err(23939):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2028)
05-01 22:09:06.215: W/System.err(23939):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2291)
05-01 22:09:06.215: W/System.err(23939):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2028)
05-01 22:09:06.215: W/System.err(23939):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2291)
05-01 22:09:06.215: W/System.err(23939):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2028)
05-01 22:09:06.215: W/System.err(23939):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2291)
05-01 22:09:06.225: W/System.err(23939):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2028)
05-01 22:09:06.225: W/System.err(23939):    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2240)
05-01 22:09:06.225: W/System.err(23939):    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1535)
05-01 22:09:06.225: W/System.err(23939):    at android.app.Activity.dispatchTouchEvent(Activity.java:2466)
05-01 22:09:06.225: W/System.err(23939):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2188)
05-01 22:09:06.225: W/System.err(23939):    at android.view.View.dispatchPointerEvent(View.java:7689)
05-01 22:09:06.225: W/System.err(23939):    at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3794)
05-01 22:09:06.225: W/System.err(23939):    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3678)
05-01 22:09:06.225: W/System.err(23939):    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4916)
05-01 22:09:06.225: W/System.err(23939):    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4895)
05-01 22:09:06.225: W/System.err(23939):    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4993)
05-01 22:09:06.225: W/System.err(23939):    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
05-01 22:09:06.225: W/System.err(23939):    at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
05-01 22:09:06.225: W/System.err(23939):    at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:174)
05-01 22:09:06.225: W/System.err(23939):    at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4966)
05-01 22:09:06.225: W/System.err(23939):    at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5012)
05-01 22:09:06.225: W/System.err(23939):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
05-01 22:09:06.225: W/System.err(23939):    at android.view.Choreographer.doCallbacks(Choreographer.java:591)
05-01 22:09:06.225: W/System.err(23939):    at android.view.Choreographer.doFrame(Choreographer.java:559)
05-01 22:09:06.225: W/System.err(23939):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777)
05-01 22:09:06.225: W/System.err(23939):    at android.os.Handler.handleCallback(Handler.java:725)
05-01 22:09:06.225: W/System.err(23939):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-01 22:09:06.225: W/System.err(23939):    at android.os.Looper.loop(Looper.java:137)
05-01 22:09:06.235: W/System.err(23939):    at android.app.ActivityThread.main(ActivityThread.java:5279)
05-01 22:09:06.235: W/System.err(23939):    at java.lang.reflect.Method.invokeNative(Native Method)
05-01 22:09:06.235: W/System.err(23939):    at java.lang.reflect.Method.invoke(Method.java:511)
05-01 22:09:06.235: W/System.err(23939):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
05-01 22:09:06.235: W/System.err(23939):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
05-01 22:09:06.235: W/System.err(23939):    at dalvik.system.NativeStart.main(Native Method)

最佳答案

您永远不会向您创建的问题 ArrayList 添加任何内容。

所以当你打电话时

  listAdapter = new ExpandableListAdapter (this, groupNames, questions);

您使用空列表。在创建新问题之前,您应该将问题 Arraylist 添加到问题中。

关于java - 需要帮助解决 ExpandableListView 中的 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23416115/

相关文章:

java - hibernate + Spring 启动2 : Not checking the default schema

java - 将 Java 应用程序部署到 Heroku

java - 将变量传递给方法 (Java)

android - 当为给定的 URI 调用 ContentResolver.notifyChange() 时,是否会通知观察该 URI 的后代 URI 的 ContentObservers?

java - 通过父类(super class)对象的 ArrayList 访问子类方法?

Java 集合。为什么没有原始类型?

java - 启动 Datomic shell 时出错 : java. lang.NoClassDefFoundError: jline/ConsoleRunner

java - 代码执行时间非常长

android - ImageViews 在多个屏幕中的准确位置

java - 使用条件 Java 填充列表内的列表