首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Studio:使用ListView显示SQLite数据库行的ArrayList

基础概念

ListView: 是Android中的一个视图组件,用于显示垂直滚动的可变长度的数据列表。它通过适配器(Adapter)来获取数据并显示每一项。

SQLite数据库: 是一个轻量级的嵌入式数据库,广泛用于Android应用中存储结构化数据。

ArrayList: 是Java中的一个动态数组实现,可以方便地添加、删除和查找元素。

相关优势

  1. 灵活性: ListView可以显示各种类型的数据,并且可以通过自定义适配器来实现复杂的布局。
  2. 性能优化: 通过ViewHolder模式可以减少findViewById的调用次数,提高列表的滚动性能。
  3. 易于集成: SQLite数据库与Android系统紧密集成,便于数据的本地存储和管理。

类型与应用场景

  • 简单文本列表: 适用于显示简单的文本信息。
  • 自定义布局: 可以创建复杂的列表项布局,包含图片、文本等多种元素。
  • 分页加载: 当数据量较大时,可以实现分页加载,提高用户体验。

示例代码

以下是一个简单的示例,展示如何在Android Studio中使用ListView显示SQLite数据库中的数据。

1. 创建SQLite数据库和表

代码语言:txt
复制
public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_NAME = "mytable";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_NAME = "name";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTableQuery = "CREATE TABLE " + TABLE_NAME + " (" +
                COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                COLUMN_NAME + " TEXT)";
        db.execSQL(createTableQuery);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

2. 创建适配器

代码语言:txt
复制
public class MyAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<String> dataList;

    public MyAdapter(Context context, ArrayList<String> dataList) {
        this.context = context;
        this.dataList = dataList;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false);
        }
        TextView textView = convertView.findViewById(android.R.id.text1);
        textView.setText(dataList.get(position));
        return convertView;
    }
}

3. 在Activity中使用ListView

代码语言:txt
复制
public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private ArrayList<String> dataList;
    private DatabaseHelper dbHelper;

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

        listView = findViewById(R.id.listView);
        dbHelper = new DatabaseHelper(this);
        dataList = new ArrayList<>();

        // 假设已经从数据库中获取了数据并填充到dataList中
        Cursor cursor = dbHelper.getReadableDatabase().query("mytable", new String[]{"name"}, null, null, null, null, null);
        if (cursor.moveToFirst()) {
            do {
                dataList.add(cursor.getString(0));
            } while (cursor.moveToNext());
        }
        cursor.close();

        MyAdapter adapter = new MyAdapter(this, dataList);
        listView.setAdapter(adapter);
    }
}

常见问题及解决方法

1. ListView滚动时卡顿

原因: 可能是由于每次滚动时都重新创建视图或频繁调用findViewById导致的。

解决方法: 使用ViewHolder模式缓存视图组件,减少不必要的查找操作。

代码语言:txt
复制
static class ViewHolder {
    TextView textView;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false);
        holder = new ViewHolder();
        holder.textView = convertView.findViewById(android.R.id.text1);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.textView.setText(dataList.get(position));
    return convertView;
}

2. 数据更新后ListView不刷新

原因: 可能是由于适配器没有通知ListView数据已经改变。

解决方法: 在更新数据后调用适配器的notifyDataSetChanged方法。

代码语言:txt
复制
dataList.add("New Item");
adapter.notifyDataSetChanged();

通过以上步骤,你可以有效地在Android应用中使用ListView显示SQLite数据库中的数据,并解决常见的性能和刷新问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

12分54秒

day04_69_尚硅谷_硅谷p2p金融_ListView中使用基本的BaseAdapter加载显示数据

领券