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

自定义ListView在模拟器中不显示:界面黑屏问题排查

ListView使用自定义BaseAdapter后黑屏无内容显示

我尝试为Car类实现自定义BaseAdapter来展示ListView,但运行应用后Activity界面黑屏。在activity_main.xml中添加静态文本能正常显示,说明问题出在ListView或setAdapter相关逻辑上。

代码配置

XML布局(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/cars_list"/>

</LinearLayout>

主Activity代码

package com.example.carscustomadapter;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView carsList = findViewById(R.id.cars_list);

        List<Car> cars = new ArrayList<>();

        cars.add(new Car(1000,20,2));
        cars.add(new Car(1000,40,2));
        cars.add(new Car(1000,60,8));
        cars.add(new Car(1000,100,5));
        cars.add(new Car(1000,20,2));
        cars.add(new Car(1000,40,2));
        cars.add(new Car(1000,60,8));
        cars.add(new Car(1000,100,5));
        cars.add(new Car(1000,20,2));
        cars.add(new Car(1000,40,2));
        cars.add(new Car(1000,60,8));
        cars.add(new Car(1000,100,5));
        cars.add(new Car(1000,20,2));
        cars.add(new Car(1000,40,2));
        cars.add(new Car(1000,60,8));
        cars.add(new Car(1000,100,5));

        CarsAdapter carsAdapter = new CarsAdapter(cars);
        carsList.setAdapter(carsAdapter);
    }
}

自定义Adapter(CarsAdapter)代码

public class CarsAdapter extends BaseAdapter implements View.OnClickListener {

    private List<Car> cars;

    public CarsAdapter(List<Car> cars) {
        this.cars = cars;
    }

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if (view == null)
            view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.car_layout, viewGroup, false);

        TextView kmTv = view.findViewById(R.id.km_tv);
        TextView fuelTv = view.findViewById(R.id.fuel_tv);

        Button driveBtn = view.findViewById(R.id.drive_btn);
        driveBtn.setTag(i);

        Car car = cars.get(i);

        kmTv.setText(car.getMileage() + "");
        fuelTv.setText(car.getFuel() + "");

        driveBtn.setOnClickListener(this);

        return view;
    }

    @Override
    public void onClick(View v) {
        LinearLayout root = (LinearLayout) v.getParent();
        EditText editText = root.findViewById(R.id.km_et);
        Car car = cars.get((Integer) v.getTag());
        car.drive(Integer.parseInt(editText.getText().toString()));
        notifyDataSetChanged();
    }
}

问题现象

运行应用后屏幕黑屏,ListView无任何内容显示。

怀疑方向

  • Adapter的配置或实现
  • 提供给ListView的数据有误
  • car_layout.xml布局存在问题(未提供但可能相关)

已尝试操作

  • 在activity_main.xml中添加静态文本,确认布局可正常渲染
  • 确认setAdapter()已被调用
  • 尝试调试应用,但无法定位问题

期望效果

ListView能加载并显示Car对象的列表行,每行展示里程、油量信息及操作按钮。


修复方案

  1. 修正getCount()方法:
    ListView通过getCount()判断数据源数量,当前返回0会导致无列表项渲染,修改为:
@Override
public int getCount() {
    return cars != null ? cars.size() : 0;
}
  1. 修正getItem()和getItemId()方法:
    这两个方法需要正确返回对应位置的数据,否则可能引发后续逻辑异常:
@Override
public Object getItem(int position) {
    return cars.get(position);
}

@Override
public long getItemId(int position) {
    return position; // 若Car类有唯一ID,可替换为car.getId()
}
  1. 额外检查项:
    • 确认car_layout.xml存在,且其中的km_tv、fuel_tv、drive_btn、km_et等控件ID拼写正确
    • 可在getView()中添加日志输出,验证该方法是否被调用,确认修复效果

内容的提问来源于stack exchange,提问作者Yonatan Shkolsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:40:45