您好我在androidstudio
中构建了一个字典应用程序通过搜索" word"它应该显示" def"和" desc"
但它没有显示desc值因为HashMap只放了一个值我怎么能放两个值并显示desc值?
我的DictObjectModel是
public class DictObjectModel {
String word, def,desc;
public DictObjectModel(String word, String def,String desc){
this.word=word;
this.def = def;
this.desc = desc;
}
public String getWord()
{
return word;
}
public String getDef()
{
return def;
}
public String getDesc() {
return desc;
}
}
我的搜索活动是
private static RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
private static RecyclerView recyclerView;
public static ArrayList<DictObjectModel> data;
DatabaseHelper db ;
ArrayList<String> wordcombimelist;
ArrayList<String> defcombimelist;
ArrayList<String> desccombimelist;
LinkedHashMap<String,String> namelist;
SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_activity );
recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
recyclerView.setHasFixedSize(true);
db= new DatabaseHelper(this);
searchView = (SearchView) findViewById(R.id.searchView);
searchView.setQueryHint("Search Here");
searchView.setQueryRefinementEnabled(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
data = new ArrayList<DictObjectModel>();
fetchData();
searchView.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
searchView.setIconified( false );
}
} );
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {return false; }
@Override
public boolean onQueryTextChange(String newText) {
newText = newText.toLowerCase();
final ArrayList<DictObjectModel> filteredList = new ArrayList<DictObjectModel>();
for (int i = 0; i < wordcombimelist.size(); i++) {
final String text = wordcombimelist.get(i).toLowerCase();
if (text.contains(newText)) {
filteredList.add(new DictObjectModel(wordcombimelist.get(i),defcombimelist.get(i),desccombimelist.get( i )));
}
}
adapter = new CustomAdapter(filteredList);
recyclerView.setAdapter(adapter);
return true;
}
});
}
public void fetchData()
{
db =new DatabaseHelper(this);
try {
db.createDataBase();
db.openDataBase();
}
catch (Exception e)
{
e.printStackTrace();
}
namelist=new LinkedHashMap<>();
int ii;
SQLiteDatabase sd = db.getReadableDatabase();
Cursor cursor = sd.query("content" ,null, null, null, null, null, null);
ii=cursor.getColumnIndex("word");
wordcombimelist=new ArrayList<String>();
defcombimelist= new ArrayList<String>();
desccombimelist= new ArrayList<String>();
while (cursor.moveToNext()){
namelist.put(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("def")));
}
Iterator entries = namelist.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry thisEntry = (Map.Entry) entries.next();
wordcombimelist.add(String.valueOf(thisEntry.getKey()));
defcombimelist.add("- "+String.valueOf(thisEntry.getValue()));
desccombimelist.add("- "+String.valueOf(thisEntry.getValue()));
}
for (int i = 0; i < wordcombimelist.size(); i++) {
data.add(new DictObjectModel(wordcombimelist.get(i), defcombimelist.get(i),desccombimelist.get(i)));
}
adapter = new CustomAdapter(data);
recyclerView.setAdapter(adapter);
}
}
任何人都可以建议我如何解决这个问题?
答案 0 :(得分:0)
您需要将namelist
的类型从LinkedHashMap<String,String>
更改为LinkedHashMap<String,DictObjectModel>
。从数据库加载数据时,您需要遍历cursor
中的每个项目,从中构建一个DictObjectModel
对象,然后将DictObjectModel
对象放入您的LinkedHashMap
中,例如namelist.put(cursor.getString(ii), myDictObjectModel)
。并且您可能想要将namelist
重命名为dictionary
。希望这会有所帮助!