我在这里已经阅读了几篇关于此的帖子,但我并不了解我的错误以及为什么它在我的简单案例中不起作用。
我的目标是在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
答案 0 :(得分:2)
获得NullPointerException
的原因是当您拨打以下行时:
listView.getChildAt(0).setEnabled(false);
您要求listView在listview
的位置0为您提供查看。但是视图尚未夸大,因此返回无视图。
如果您希望ListView
拥有自定义行为,建议您尝试使用自定义适配器而不是ArrayAdapter
。自定义适配器可以从ArrayAdapter
扩展,您可以更自由地表达自己的观看方式。您可以找到全面的教程here。