【发布时间】:2021-12-29 08:54:27
【问题描述】:
我有一个包含多列的房间数据库表 (PartsTable)。我只需要从包含一个单词字符串的表中获取一列,并且我正在使用根据谷歌文档(PartsTuple)的表的子集。
现在我需要创建一个函数,该函数将返回获取数据的 ArrayList,我可以在我的适配器类中访问它。我能够返回数据并在控制台日志中查看它(从我从 ViewModel 获取数据的主要片段),但我似乎无法让它在将返回上述数据列表的函数上工作然后我可以从不同的班级访问。
来自 DAO 的代码:
@Query("SELECT keyword FROM partsTable")
LiveData<List<PartsTuple>> getTuple();
来自 repo 的代码:
public LiveData<List<PartsTuple>> getPartsTuple() {
return partsKeyword;
}
来自视图模型的代码:
public LiveData<List<PartsTuple>> getPartsTuple() {
return partsKeyword;
}
我在日志中显示数据的片段类:
mViewModel.getPartsTuple().observe(getViewLifecycleOwner(), new Observer<List<PartsTuple>>() {
@Override
public void onChanged(List<PartsTuple> partTuple) {
Log.d(TAG, "vraceno: " + partTuple.toString());
}
});
,以及来自日志的数据
D/PartsFragment: vraceno: [part1, parts3, part_2]
来自适配器类的代码,我在其中比较字符串并突出显示它们。
ArrayTEST arrayTEST = new ArrayTEST();
ArrayList<String> values = arrayTEST.getWordFromHardcodedList();
String text = note.getPartsSubtitle();
Spannable textSpannable = new SpannableString(text);
for (int j = 0; j < values.size(); j++) {
//word of list
String word = String.valueOf(values.get(j));
//find index of words
for (int i = -1; (i = text.indexOf(word, i + 1)) != -1; i++) {
//find the length of word for set color
int last = i + word.length();
textSpannable.setSpan(new BackgroundColorSpan(Color.parseColor("#1a0cab8f")),
i, last, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textSpannable.setSpan(new ForegroundColorSpan(Color.RED),
i, last, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
if (note.getPartsSubtitle().trim().isEmpty()) {
tvTEXT.setVisibility(View.GONE);
} else {
tvTEXT.setText(textSpannable);
}
我遇到问题的部分是,我需要从数据库中获取数据列表,而不是像这样硬编码
arrayTEST.getWordFromHardcodedList();
现在我需要从我的适配器类访问此数据列表,因为如果有匹配项,我想在显示所有数据的主回收器视图中突出显示部件列表中的部件.我可以在手动键入列表时执行此操作,但它需要根据用户输入进行动态处理。
提前致谢
【问题讨论】:
标签: java android arrays android-room android-livedata