android - ListView 只显示一行

标签 android listview

我有一个简单的列表,它假设显示数据库表中的所有行。但是,它在 ListView 中只显示一行。

尽管它从数据库接收了所有行(已验证 configArrayList 的大小),但仅显示第一行并丢弃其他行。

这是 Activity 和自定义适配器。

主要 Activity :

ArrayList<HashMap<String, String>> configArrayList = dbTools.getAllConfig(); // Returns 4 rows
ArrayList<ConfigEntity> configMenu = new ArrayList<>();

if (!(configArrayList.isEmpty()))
{
    Iterator<HashMap<String, String>> iterator = configArrayList.iterator();

    while (iterator.hasNext())
    {
        HashMap<String, String> configMap = iterator.next();

        // ConfigEntity contains two members Name, ID and their setter, getter
        ConfigEntity entity = new ConfigEntity();

        entity.setID(configMap.get("ID"));
        entity.setName(String.valueOf(configArrayList.size()));
        // Set Name as Size to verify the list size is grater than 1. (Size is 4)

        configMenu.add(entity);
    }
}

if (!(configMenu.isEmpty()))
{
    ListAdapter adapter = new ConfigListAdapter(this, configMenu);
    ListView theListView = (ListView) findViewById(R.id.config_list_listView);
    theListView.setAdapter(adapter);
}

这是自定义适配器:

    public class ConfigListAdapter extends BaseAdapter {

    private ArrayList<ConfigEntity> entityList;
    private LayoutInflater layoutInflater;

    public ConfigListAdapter(Context context, ArrayList<ConfigEntity> entityList) {
        this.entityList = entityList;
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return entityList.size();
    }

    @Override
    public Object getItem(int position) {
        return entityList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.config_list_row_layout, null);
            holder = new ViewHolder();
            holder.nameTextView = (TextView) convertView.findViewById(R.id.config_list_row_textView);
            holder.idTextView = (TextView) convertView.findViewById(R.id.config_list_row_id);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        ConfigEntity entity = entityList.get(position);

        holder.nameTextView.setText(entity.getName());
        holder.idTextView.setText(entity.getID());

        return convertView;
    }

    static class ViewHolder {

        TextView nameTextView;
        TextView idTextView;
    }
}

main_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">


        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Add New"
            android:id="@+id/config_list_addConfig_button"
            android:layout_gravity="right"
            android:onClick="addNewConfig" />

        <ListView
            android:id="@+id/config_list_listView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:dividerHeight="5dp">
        </ListView>

    </LinearLayout>
</ScrollView>

config_list_listView.xml

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


    <TextView
        android:id="@+id/config_list_row_textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:layout_marginTop="@dimen/margin_10dp"
        android:layout_marginLeft="@dimen/margin_20dp"
        android:longClickable="true" />

    <TextView
        android:id="@+id/config_list_row_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />
</LinearLayout>

最佳答案

请试试这个。 更改getView方法如下

@Override
public View getView(int position, View convertView, ViewGroup parent) {
     view=convertView;
    ViewHolder holder;

    if (convertView == null) {
        view = layoutInflater.inflate(R.layout.config_list_row_layout, null);
        holder = new ViewHolder();
        holder.nameTextView = (TextView) view.findViewById(R.id.config_list_row_textView);
        holder.idTextView = (TextView) view.findViewById(R.id.config_list_row_id);
        view.setTag(holder);

    } else {
        holder = (ViewHolder) view.getTag();
    }

    ConfigEntity entity = entityList.get(position);

    holder.nameTextView.setText(entity.getName());
    holder.idTextView.setText(entity.getID());

    return view;
}

并声明View View ;作为类级别变量; 希望它有帮助谢谢。请参阅此处:- https://androidruler.wordpress.com/2016/02/21/android-custom-listview-example/

关于android - ListView 只显示一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35575334/

相关文章:

android - Retrofit 2 和 RxJava 错误处理运算符

java - 如何在 Android TV 上实现 TvView?

android 按钮在 listview 之上

asp.net - 在 DataBound 事件上获取绑定(bind)到 ListView 的数据

android - 尽管有 ViewHolder、LazyLoader 和简单的布局,Listview 仍然卡顿

android - Google Analytics 不生成配置文件,Firebase 冲突

android - 显示由没有标题的 Activity 制作的对话框

java - 使用 BaseAdapter 的 ListView 未显示在 Activity 中

android - ListView 中的按钮根据最终列表项被错误修改

java - 在继续之前等待线程完成