【问题标题】:Recycler view show blank items回收站视图显示空白项目
【发布时间】:2020-09-11 07:06:11
【问题描述】:

我正在构建一个从 sqlite db 中搜索字符串并在 recyclerview 中显示结果的 Android 应用程序。

我发现构建此应用程序的问题是,当我键入 f.e 包含字母“a”的字符串时,它会将包含该字母的行数显示为空白项。有人可以帮忙吗?

MainActivity.java

public void fetchContactOffline(String flcode) {
        ArrayList<QueryResult> list = new ArrayList();
        if (flcode.length() > 0) {
            StringBuilder query = new StringBuilder("select * from ").append(TABLE_NAME).append(" where ");
            query.append(TABLE_COLUMN_FLCODE).append(" like \"%").append(flcode).append("%\"");
            SQLiteOpenHelper database = new RichDB(this);
            SQLiteDatabase db = database.getReadableDatabase();
            Cursor cursor = db.rawQuery(query.toString(), null);

            if (cursor.moveToFirst()) {
                do {
                    QueryResult queryResult = new QueryResult();
                    queryResult.answer = cursor.getString(cursor.getColumnIndex(TABLE_COLUMN_ANSWER));
                    queryResult.question = cursor.getString(cursor.getColumnIndex(TABLE_COLUMN_QUESTION));
                    list.add(queryResult);
                } while (cursor.moveToNext());
            }
            db.close();
        }
        progressBar.setVisibility(GONE);
        adapter = new Adapter(list);
        recyclerView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }

**适配器.java** ```
private ArrayList<QueryResult> questions;

public Adapter(ArrayList<QueryResult> questions) {
    this.questions = questions;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.items, parent, false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.reponse.setText(questions.get(position).getAnswer());
    holder.reponse.setTextColor(Color.BLACK);
    holder.question.setText(questions.get(position).getQuestion());
    holder.question.setTextColor(Color.BLUE);
}

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

public static class MyViewHolder extends RecyclerView.ViewHolder{
    TextView reponse,question;
    public MyViewHolder(View itemView) {
        super(itemView);
        reponse = itemView.findViewById(R.id.AnswerItem);
        question = itemView.findViewById(R.id.QuestionItem);
    }
}
<br>
**items.xml**
<br>

<TextView
    android:paddingTop="10dp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:textSize="20sp"
    android:textColor="#111"
    android:id="@+id/AnswerItem"
    android:text="Answer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/QuestionItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="15dp"
    android:paddingTop="5dp"
    android:paddingRight="15dp"
    android:paddingBottom="10dp"
    android:text="Question" />

<View
    android:background="#bfbfbf"
    android:layout_width="match_parent"
    android:layout_height="0.1dp"/>
``` **截屏**
[截图 - 1][1]

Screenshot - 2

【问题讨论】:

  • 你也可以提供你的布局xml吗?
  • 显示此类QueryResult

标签: java android sqlite android-recyclerview


【解决方案1】:

我认为问题在于您没有这样称呼: recyclerView.setLayoutManager(new LinearLayoutManager (this));。 而且我认为这行 - adapter.notifyDataSetChanged(); 是多余的,因为在上面两行创建了适配器的新实例 - adapter = new Adapter(list);

【讨论】:

  • 在调用函数 fetchcontactoffline 之前我有recyclerView.setLayoutManager(new LinearLayoutManager (this));,问题是行(项目)确实显示但空白!!
【解决方案2】:

我已修复,问题出在 QueryResult.java 中。感谢您的帮助 。 :)

【讨论】: