【问题标题】:RecyclerView doesn't show data from DBRecyclerView 不显示来自数据库的数据
【发布时间】:2021-08-28 09:44:48
【问题描述】:

我从数据库中获取数据(它工作正常),并且必须在 RecyclerView 中显示它,但我的 RecyclerView 没有显示任何内容,尽管它不是空的。我的适配器很简单:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { 
 
 ArrayList<Template> templates = new ArrayList<>(); 
 
 
 public RecyclerViewAdapter(){} 
 
 public RecyclerViewAdapter(ArrayList<Template> myTemplates) { 
 this.templates = myTemplates; 
 } 
 
 
 @NonNull 
 @Override 
 public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 
 View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); 
 return new ViewHolder(view); 
 } 
 
 @Override 
 public void onBindViewHolder(@NonNull ViewHolder holder, int position) { 
 holder.myTitle.setText(templates.get(position).getTitle()); 
 holder.myLink.setText(templates.get(position).getImageLink()); 
 } 
 
 @Override 
 public int getItemCount() { 
 return 0; 
 } 
 
 public class ViewHolder extends RecyclerView.ViewHolder { 
 
 TextView myTitle, myLink; 
 
 public ViewHolder(@NonNull View itemView) { 
 super(itemView); 
 
 myTitle = itemView.findViewById(R.id.title); 
 myLink = itemView.findViewById(R.id.link); 
 } 
 } 
} 
 

类模板也很简单,我想我不需要展示它。

这是我的 MainActivity,其中我的 RecyclerView 获得了数据

public class MainActivity extends AppCompatActivity { 
 
 private TemplateDatabaseHelper mDBHelper; 
 private SQLiteDatabase mDb; 
 RecyclerView rv; 
 RecyclerViewAdapter adapter; 
 ArrayList<Template> myTemplates; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 
 myTemplates = new ArrayList<>(); 
 mDBHelper = new TemplateDatabaseHelper(this); 
 rv = findViewById(R.id.rv); 
 
 try { 
 mDBHelper.updateDataBase(); 
 } catch (IOException mIOException) { 
 throw new Error("UnableToUpdateDatabase"); 
 } 
 
 try { 
 mDb = mDBHelper.getWritableDatabase(); 
 } catch (SQLException mSQLException) { 
 throw mSQLException; 
 } 
 
 Cursor cursor = mDb.rawQuery("SELECT * FROM titles", null); 
 cursor.moveToFirst(); 
 while (!cursor.isAfterLast()) { 
 Template template = new Template(cursor.getString(1), cursor.getString(2)); 
 
 myTemplates.add(template); 
 cursor.moveToNext(); 
 } 
 
 rv.setHasFixedSize(true); 
 rv.setLayoutManager(new LinearLayoutManager(this)); 
 adapter = new RecyclerViewAdapter(myTemplates); 
 rv.setAdapter(adapter); 
 } 
} 
 

我使用了调试器,一切正常,它获取数据并且我的 ArrayList 不为空,我的所有代码都应该正常工作,但我的 RecyclerView 仍然为空。请帮忙

【问题讨论】:

  • 您是否通过在 onBindViewHolder 方法中放置断点来检查您的代码,以检查 templates.get(position).getTitle() 和 templates.get(position).getImageLink() 是否具有数据并设置为文本视图正确吗?

标签: java android arraylist android-recyclerview


【解决方案1】:

只需替换回收站视图适配器中的方法

@Override public int getItemCount() { return templates.size(); }

【讨论】:

    【解决方案2】:

    您的适配器项目计数为 0,这就是它不显示数据的原因。

    更改此功能:

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

    ...
    return templates.size();
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 2019-05-24
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多