Java 在ArrayAdapter中设置OnClickListener

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

我试图在扩展ArrayAdapter的类的getView()方法中为Textview设置OnClickListener。但是,我只能单击前三项,在它们之后我会得到一个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初始化视图。但只有当视图为空时才初始化视图,如果为空则不初始化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。