java - 在 ArrayAdapter 中设置 OnClickListener

标签 java android

我试图在 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/

相关文章:

java - 如何询问用户是否要始终显示欢迎页面?

java - 如何在 eclipse 中禁用 dojo 错误

java - 如何从struts操作类返回对ajax的多个响应?

java - 如何将小程序与 jar 中的包一起使用

android - 调用Asynctask调用webservice后如何更新listview

java - 如何在内存不足异常的情况下解压 Android 应用程序中的 RAR 文件?

java : Returning stream or resulting bytes

java - 使用 Apache poi 在 Android 中生成 Excel

android - Flutter Android TV 应用程序无法使用方向键进行选择

Android设置字符编码