我试图在 getView() 中为 Textview 设置 OnClickListener - 扩展 ArrayAdapter 的类的方法。但是,我只能单击前三个项目,在它们之后我得到一个 NullPointerException。为什么?
代码:
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初始化 View 。但仅在 view 为 null 时初始化它,但如果它为 null 则不初始化 ConvertView。
为什么不能使用view来设置背景而不是convertview?
您可以使用 View 持有者作为 ListView 的更好实践。引用 - https://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/
此外,您可以按如下方式设置监听器 -
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();
}
关于java - 在 ArrayAdapter 中设置 OnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45617484/