Java 在ArrayAdapter中设置OnClickListener
我试图在扩展ArrayAdapter的类的getView()方法中为Textview设置OnClickListener。但是,我只能单击前三项,在它们之后我会得到一个NullPointerException。为什么? 代码:Java 在ArrayAdapter中设置OnClickListener,java,android,Java,Android,我试图在扩展ArrayAdapter的类的getView()方法中为Textview设置OnClickListener。但是,我只能单击前三项,在它们之后我会得到一个NullPointerException。为什么? 代码: content = (TextView) view.findViewById(R.id.list_layout); content.setText(currentLayout.getContent()); public View getView(final int pos
content = (TextView) view.findViewById(R.id.list_layout);
content.setText(currentLayout.getContent());
public View getView(final int position, @Nullable final View convertView, @NonNull ViewGroup parent) {
currentLayout = getItem(position);
View view = convertView;
if (view == null) {
view = LayoutInflater.from(getContext()).inflate(R.layout.rowlayout, parent, false);
}
content = (TextView) view.findViewById(R.id.list_layout);
content.setText(currentLayout.getContent());
number = view.findViewById(R.id.number);
layout = view.findViewById(R.id.layout);
content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
convertView.setBackgroundColor(Color.YELLOW);
}
});
number.setText("1");
return view;
}
事故报告:
--------- beginning of crash
08-10 15:18:45.591 3845-3845/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.philipp.einkaufsliste110, PID: 3845
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setBackgroundColor(int)' on a null object reference
at com.example.philipp.einkaufsliste110.Adapter.CustomAdapter$1.onClick(CustomAdapter.java:63)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
08-10 15:18:45.592 1651-2151/system_process W/ActivityManager: Force finishing activity com.example.philipp.einkaufsliste110/.MainActivity
08-10 15:18:45.606 1305-3578/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
[ 08-10 15:18:45.627 1651: 4136 D/ ]
HostConnection::get() New Host Connection established 0x8e578440, tid 4136
[ 08-10 15:18:45.628 1651: 4136 W/ ]
Unrecognized GLES max version string in extensions: ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1
您没有检查convertview的null 您只能使用convertview初始化视图。但只有当视图为空时才初始化视图,如果为空则不初始化convertview 为什么不能使用view而不是convertview来设置背景 对于listview,可以更好地使用视图保持器。提及- 另外,您可以按如下方式设置侦听器-
if (convertView == null) {
convertView = inflater.inflate(/**layout file**/, parent, false);
viewHolder = new ViewHolder();
viewHolder.content = (TextView) view.findViewById(R.id.list_layout);
viewHolder.content.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
convertView.setBackgroundColor(Color.YELLOW);
});
vi.setTag(viewHolder);
} else {
// else code goes here
viewHolder = (ViewHolder) convertView.getTag();
}
您没有检查convertview的null 您只能使用convertview初始化视图。但只有当视图为空时才初始化视图,如果为空则不初始化convertview 为什么不能使用view而不是convertview来设置背景 对于listview,可以更好地使用视图保持器。提及- 另外,您可以按如下方式设置侦听器-
if (convertView == null) {
convertView = inflater.inflate(/**layout file**/, parent, false);
viewHolder = new ViewHolder();
viewHolder.content = (TextView) view.findViewById(R.id.list_layout);
viewHolder.content.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
convertView.setBackgroundColor(Color.YELLOW);
});
vi.setTag(viewHolder);
} else {
// else code goes here
viewHolder = (ViewHolder) convertView.getTag();
}
显示堆栈跟踪可以粘贴例外粘贴例外以获得更好的帮助。我做到了@VinceEmighdidi知道了@Swatish显示堆栈跟踪可以粘贴例外粘贴例外以获得更好的帮助。我做到了@VinceEmighdidi知道了@斯瓦提谢谢你。但是什么是视图持有者呢?您可能想看看实现ListView的最佳实践。请访问回答中提到的链接以查看视图持有者。谢谢。但是什么是视图持有者呢?您可能想看看实现ListView的最佳实践。请访问回答中提到的链接查看ViewHolder。