0

リストビューで値「クラスの編集...」が選択されたときに呼び出される次のメソッドがあります。

public void editClassOptionPressed(AdapterView<?> parent,int position,ArrayList<Class>classesArrayList){
    //The line below throws the null pointer exception
    parent.getChildAt(position).setBackgroundColor(Color.BLUE);
    Toast.makeText(getApplicationContext(), "Please Select Class To Edit...",Toast.LENGTH_LONG).show();
    setEditListener(classesArrayList, adapter);
}

このメソッドは、次のメソッドによって呼び出され、次に OnCreate メソッドで呼び出されます。

public void setDefaultListener(final ArrayList<Class>classesArrayList){
    ListView lv = getListView();
    lv.setTextFilterEnabled(true);
    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if(position==(classesArrayList.size()-3)){
            Intent intent = new Intent(ClassView.this, AddNewClassView.class);
            startActivity(intent);
        }
        else if(position==(classesArrayList.size()-1)){
            deleteClassOptionPressed(parent,position);
        }
        else if(position==(classesArrayList.size()-2)){
            **editClassOptionPressed(parent, position, classesArrayList);** 
        }
        else{
            Intent intent = new Intent(ClassView.this, GradeView.class);
            intent.putExtra("selectedClassName",((TwoLineListItem)view).getText1().getText());
            startActivity(intent);
        }
      }
    });
}

これまでにデバッグしたことから、親自体はnullではありませんが、親はその場所に子を登録していないようです。また、これは、ListView に一定数以上のアイテムがある場合にのみ発生することも指摘しておく必要があります。誰にもアイデアはありますか?logcat の出力は次のとおりです。

06-26 18:31:23.373: E/AndroidRuntime(1243): FATAL EXCEPTION: main
06-26 18:31:23.373: E/AndroidRuntime(1243): java.lang.NullPointerException
06-26 18:31:23.373: E/AndroidRuntime(1243): athellolistview.com.ClassView.editClassOptionPressed(ClassView.java:112)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at hellolistview.com.ClassView$4.onItemClick(ClassView.java:266)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at android.widget.AdapterView.performItemClick(AdapterView.java:292)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at android.widget.AbsListView.performItemClick(AbsListView.java:1058)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at android.widget.AbsListView$1.run(AbsListView.java:3168)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at android.os.Handler.handleCallback(Handler.java:605)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at android.os.Looper.loop(Looper.java:137)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at android.app.ActivityThread.main(ActivityThread.java:4424)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at java.lang.reflect.Method.invokeNative(Native Method)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at java.lang.reflect.Method.invoke(Method.java:511)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-26 18:31:23.373: E/AndroidRuntime(1243):     at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

0

位置!= childPosition

たぶん、この問題に役立つExpandableListViewの使用を検討する必要があります。

int childPosition = ExpandableListView.getPackedPositionChild(position);
于 2012-06-26T18:50:03.173 に答える