【发布时间】:2016-07-20 12:28:11
【问题描述】:
我正在 Android 中开发一个看起来像这样的 RecyclerView:
一个
一个话题1
一个话题2
一个话题3
B
B 主题1
B 话题2
在您点击父字母之前隐藏主题。
我有一些我认为应该可以工作的东西,但是现在如果我手动将行添加到我的数据库中(这是设计使然),无法识别其他行,即使我卸载应用程序并将其重新加载。这就是我正在查看的内容:
final List<AToZList> aToZ = addTopics();
mAdapter = new AToZAdapter(getContext(), aToZ);
...
private List<AToZList> addTopics() {
topics = new ArrayList<Topic>();
List<AToZList> aToZ;
AToZList A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z;
A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=U=V=W=X=Y=Z = null;
Cursor topicCursor = database.rawQuery("SELECT " + ExternalDbContract.QuoteEntry.TOPIC +
" FROM " + ExternalDbContract.QuoteEntry.TABLE_NAME, null);
try {
for (topicCursor.moveToFirst(); !topicCursor.isAfterLast(); topicCursor.moveToNext()) {
String firstLetter = topicCursor.getString(0).toUpperCase().substring(0, 1);
switch (firstLetter) {
case "A":
if(A == null) {
A = new AToZList("A", getTopics(firstLetter));
}
break; //and so on for every letter
}finally {
aToZ = Arrays.asList(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z);
}
topicCursor.close();
return aToZ;
...
private ArrayList<Topic> getTopics(String firstLetter) {
Cursor topicCursor = database.rawQuery("SELECT " + ExternalDbContract.QuoteEntry.TOPIC +
" FROM " + ExternalDbContract.QuoteEntry.TABLE_NAME, null);
ArrayList<Topic> topicsByLetter = new ArrayList<Topic>();
for(topicCursor.moveToFirst(); !topicCursor.isAfterLast(); topicCursor.moveToNext()) {
if (topicCursor.getString(0).toUpperCase().substring(0, 1).equals(firstLetter)) {
topicsByLetter.add(new Topic(topicCursor.getString(0)));
}
}
topicCursor.close();
return topicsByLetter;
}
代码太多了。
我添加了一些日志记录以查看实际通过的内容。我在数据库中有 3 个主题条目,两个以“A”开头,第三个以“B”开头。 A 可以通过(有两个条目),然后由于某种原因它踢到 finally 块,并破坏了数组,因为它只有一个条目(如一个“A”条目)。 topicCursor.getCount() 告诉我只有两个条目,但有三个。诅咒你的游标!
如果有帮助,我已提交where I'm at onto Github。
编辑:我已经编辑了数据库本身以容纳完全不同的主题名称,并且它继续显示以前的主题。我已经从我的测试设备上卸载了该应用程序,所以我真的不确定数据来自哪里。但这似乎确实与数据库有关。
【问题讨论】:
标签: android sqlite arraylist cursor android-recyclerview