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

Android Studio中如何在ListView中展示自定义User对象

实现ListView展示包含用户名和电台名的User对象

嘿,我来帮你把ListView改成展示带用户名和电台名的User对象~ 咱们一步步来操作:

1. 确保你的User类有getter方法

首先,你的User类需要提供获取用户名和电台名的方法,这样Adapter才能拿到数据:

public class User {
    private String username;
    private String radioName;

    public User(String username, String radioName) {
        this.username = username;
        this.radioName = radioName;
    }

    // 必须添加这两个getter方法
    public String getUsername() {
        return username;
    }

    public String getRadioName() {
        return radioName;
    }
}

2. 创建ListView子项的自定义布局

在res/layout下新建list_item_user.xml,这个布局用来展示单个User的两个字段:

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

    <!-- 显示用户名 -->
    <TextView
        android:id="@+id/tv_username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold"/>

    <!-- 显示电台名称 -->
    <TextView
        android:id="@+id/tv_radio_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:textColor="@android:color/darker_gray"
        android:layout_marginTop="4dp"/>
</LinearLayout>

3. 编写自定义Adapter

因为系统默认的ArrayAdapter只能处理单个TextView的情况,所以我们需要自定义一个继承BaseAdapter的UserAdapter,用来绑定数据和布局:

public class UserAdapter extends BaseAdapter {
    private Context mContext;
    private List<User> mUserList;

    // 构造方法传入上下文和数据列表
    public UserAdapter(Context context, List<User> userList) {
        mContext = context;
        mUserList = userList;
    }

    @Override
    public int getCount() {
        return mUserList.size(); // 返回数据总数
    }

    @Override
    public Object getItem(int position) {
        return mUserList.get(position); // 返回对应位置的User对象
    }

    @Override
    public long getItemId(int position) {
        return position; // 返回位置id
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        // 复用convertView提升ListView性能
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_user, parent, false);
            holder = new ViewHolder();
            holder.usernameTv = convertView.findViewById(R.id.tv_username);
            holder.radioNameTv = convertView.findViewById(R.id.tv_radio_name);
            convertView.setTag(holder); // 把ViewHolder存到View里
        } else {
            holder = (ViewHolder) convertView.getTag(); // 取出复用的ViewHolder
        }

        // 给控件设置对应的数据
        User currentUser = mUserList.get(position);
        holder.usernameTv.setText(currentUser.getUsername());
        holder.radioNameTv.setText(currentUser.getRadioName());

        return convertView;
    }

    // ViewHolder内部类,避免重复调用findViewById
    private static class ViewHolder {
        TextView usernameTv;
        TextView radioNameTv;
    }
}

4. 修改UserActivity代码,使用自定义Adapter

把原来的单个User对象改成List集合,然后设置自定义的Adapter到ListView上:

public class UserActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
    private List<User> userList = new ArrayList<>();
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user); // 确保你的布局里有ListView

        // 初始化User数据
        userList.add(new User("User1","Radio1"));
        userList.add(new User("User2","Radio2"));
        userList.add(new User("User3","Radio3"));

        // 找到ListView并设置Adapter
        listView = findViewById(R.id.list_view);
        UserAdapter adapter = new UserAdapter(this, userList);
        listView.setAdapter(adapter);

        // 设置列表项点击事件
        listView.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 获取点击的User对象,做你需要的操作
        User clickedUser = userList.get(position);
        Toast.makeText(this, "选中了:" + clickedUser.getUsername() + " - " + clickedUser.getRadioName(), Toast.LENGTH_SHORT).show();
    }
}

最后检查你的Activity布局

确保activity_user.xml里包含一个id为list_view的ListView:

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

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

这样操作后,你的ListView就能每个项都展示用户名和对应的电台名啦~

内容的提问来源于stack exchange,提问作者Loic T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:25:24