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

RecyclerView不显示SQLite数据,新增内容需重启才生效

问题根源与解决方案

你的核心问题是新增数据后没有主动触发RecyclerView的数据源刷新,再加上几处代码小问题,导致新添加的内容只能在重启APP后才会显示。下面我一步步拆解问题并给出修复方案:


1. 核心问题:列表片段未在返回时重新加载数据

你的preparePeopleData()方法只在片段初始化时执行了一次,当你从Add_New_Person页面返回后,这个方法并没有被再次调用——RecyclerView还是拿着旧的数据源自然看不到新内容。

2. 次要问题:数据源未清空导致重复叠加

就算你重新调用加载方法,每次加载前不清空PeopleList的话,旧数据会和新数据重复叠加,后续会出现显示混乱的问题。

3. 隐藏bug(不影响实时更新,但会破坏数据正确性)

  • 在DatabaseHandler的getAllPeople()里,newPerson.setmTwitterId(cursor.getString(2));索引错误:twitter_id是第4列(索引从0开始),应该用cursor.getString(3)。
  • 在Add_New_Person的onOptionsItemSelected方法中,if语句没加大括号,导致只有userName赋值在判断逻辑内,其余代码不管点击的是不是done按钮都会执行,容易引发意外错误。

具体修复步骤

步骤1:修改preparePeopleData(),添加清空逻辑

每次加载新数据前先清空旧列表,避免重复:

private void preparePeopleData() {
    DatabaseHandler databaseHandler = new DatabaseHandler(this.getContext());
    List<New_Person_data> peopleArrayList = databaseHandler.getAllPeople();
    
    // 先清空旧数据源,避免重复添加
    PeopleList.clear();
    
    for (New_Person_data newPerson : peopleArrayList) {
        People people = new People(newPerson.getmUserName());
        PeopleList.add(people);
    }
    
    Log.d("Peple Array size ", String.valueOf(peopleArrayList.size()));
    
    // 排序
    Collections.sort(PeopleList, new Comparator<People>() {
        @Override
        public int compare(People lhs, People rhs) {
            return lhs.getPerson().compareTo(rhs.getPerson());
        }
    });
    
    // 通知Adapter数据更新
    mAdapter.notifyDataSetChanged();
}

步骤2:在列表片段的onResume()中触发数据刷新

当你从添加页面返回时,onResume()会自动触发,此时重新加载数据就能实时显示新增内容:

@Override
public void onResume() {
    super.onResume();
    preparePeopleData();
}

步骤3:修复DatabaseHandler的索引错误

修正twitter_id的赋值索引:

// 原错误代码:newPerson.setmTwitterId(cursor.getString(2));
newPerson.setmTwitterId(cursor.getString(3));

步骤4:修复Add_New_Person的if语句块

给if逻辑加上大括号,确保只有点击done按钮时才执行添加操作:

@Override 
public boolean onOptionsItemSelected(MenuItem item) {
    int itemId = item.getItemId();
    New_Person_data new_person_data;
    if(itemId == R.id.new_person_done) {
        userName = mUserName.getText().toString();
        facebookId = mFacebookId.getText().toString();
        twitterId = mTwitterId.getText().toString();
        
        new_person_data = new New_Person_data(userName,facebookId,twitterId);
        databaseHandler.addNewPerson(new_person_data);
        getActivity().finish();
    }
    return true;
}

完成以上修改后,你添加完数据返回列表页面时,RecyclerView就会自动刷新并显示最新内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:46:57