禁用ListView项 - 我的代码中出现异常

时间:2016-04-17 05:27:05

标签: android listview

我在这里已经阅读了几篇关于此的帖子,但我并不了解我的错误以及为什么它在我的简单案例中不起作用。

我的目标是在myCondition为假时禁用(并且我希望以浅灰色显示它们)2项。

//__________________________
/

final Context myContext = this;
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(myContext);
final ListView listView = new ListView(myContext);
List myListOptions = Arrays.asList(
        "item 0",  //position=0
        "item 1"  //position=1
) ;
final ArrayAdapter arrayAdapter = new ArrayAdapter(myContext, android.R.layout.simple_list_item_1, myListOptions );
listView.setAdapter(arrayAdapter);

//*****HERE THE PROBLEM IS!!!*********
if (myCondition == false) {
    listView.getChildAt(0).setEnabled(false);
    listView.getChildAt(1).setEnabled(false);
}

alertDialogBuilder.setView(listView);
final AlertDialog alertDialog = alertDialogBuilder.create();
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        //__________________________
        //__________________________
        //longclick su Item 0
        if (position == 0){
            //Do something
        }

        //__________________________
        //__________________________
        //longclick su CopiaTesto
        if (position == 1) {
            //Do something
        }
        //__________________________
        //__________________________

        alertDialog.dismiss();

        return true;
    }
});
alertDialog.show();
return true;
//__________________________

我在if (myCondition==false)行上发现了一个例外:

04-17 07:06:27.471  25198-25198/com.test E/﹕ Classe 'HeaderFragment'  ----  'onClick Opzioni'  ----  Exception: null        ----  Nome Thread (che invoca il Log)='main'
    java.lang.NullPointerException
        at com.test.HeaderFragment$2$3.onLongClick(HeaderFragment.java:462)
        at android.view.View.performLongClick(View.java:4142)
        at android.view.View$CheckForLongPress.run(View.java:17031)
        at android.os.Handler.handleCallback(Handler.java:615)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5118)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
        at dalvik.system.NativeStart.main(Native Method)

我已经知道什么是空指针异常,但我不明白为什么我在这种情况下有它,可能是因为我不熟悉arrayAdapter

1 个答案:

答案 0 :(得分:2)

获得NullPointerException的原因是当您拨打以下行时:

listView.getChildAt(0).setEnabled(false);

您要求listView在listview的位置0为您提供查看。但是视图尚未夸大,因此返回无视图

如果您希望ListView拥有自定义行为,建议您尝试使用自定义适配器而不是ArrayAdapter。自定义适配器可以从ArrayAdapter扩展,您可以更自由地表达自己的观看方式。您可以找到全面的教程here