You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio实现ListView后应用持续崩溃,求解决方案

解决ListView应用崩溃问题

问题分析与修复步骤:

1. MainActivity 空指针异常(核心崩溃原因)

  • 未初始化视图绑定对象binding就直接调用binding.getRoot(),触发空指针异常。
  • 重复调用setContentView,同时通过布局文件和绑定对象设置布局,逻辑冲突。

修正后的MainActivity代码:

package com.example.listviewassigment;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.example.listviewassigment.databinding.ActivityMainBinding;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;
    MenuAdapter menuAdapter;
    ArrayList<Menu> dataArrayList = new ArrayList<>();
    Menu menu;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 初始化视图绑定
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        int[] imagedish = {R.drawable.pizza,R.drawable.desert,R.drawable.beverage};
        String[] titledish = {"Pizza","Desert","Beverage"};
        String[] nodishes = {"5 sản phẩm","3 sản phẩm","6 sản phẩm"};
        String[] nodiscounteddishes = {"5 đang giảm giá","3 đang giảm giá","6 đang giảm giá"};

        for (int i=0;i< imagedish.length;i++) {
            menu = new Menu(titledish[i],nodishes[i],nodiscounteddishes[i],imagedish[i]);
            dataArrayList.add(menu);
        }
        menuAdapter = new MenuAdapter(MainActivity.this,dataArrayList);
        binding.lsMenu.setAdapter(menuAdapter);
        binding.lsMenu.setClickable(true);
    }
}

2. MenuAdapter 方法重写错误

  • getView方法返回值不应标注@Nullable,父类ArrayAdapter的getView要求返回非空View。
  • 混淆了方法参数的视图对象与类成员变量,导致视图复用逻辑错误,应直接使用方法传入的convertView参数。
  • 移除多余的类成员变量position、view、parent,避免变量冲突。

修正后的MenuAdapter代码:

package com.example.listviewassigment;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;

public class MenuAdapter extends ArrayAdapter<Menu> {

    public MenuAdapter(@NonNull Context context, @NonNull ArrayList<Menu> dataArrayList) {
        super(context, R.layout.item_dish, dataArrayList);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        Menu listmenu = getItem(position);

        if(convertView == null){
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_dish, parent, false);
        }

        ImageView imagedish = convertView.findViewById(R.id.imagedish);
        TextView titledish = convertView.findViewById(R.id.titledish);
        TextView nodishes = convertView.findViewById(R.id.nodishes);
        TextView nodiscounteddishes = convertView.findViewById(R.id.nodiscounteddishes);

        imagedish.setImageResource(listmenu.image);
        titledish.setText(listmenu.name);
        nodishes.setText(listmenu.nodishes);
        nodiscounteddishes.setText(listmenu.sale);

        return convertView;
    }
}

额外检查点

  • 确认item_dish.xml布局文件中存在imagedish、titledish、nodishes、nodiscounteddishes四个控件,且ID完全匹配。
  • 检查R.drawable.pizza、R.drawable.desert、R.drawable.beverage图片已正确放置在res/drawable目录下。

内容的提问来源于stack exchange,提问作者Hera Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:55:14