如何在Hashmap中放入两个值

时间:2018-06-16 11:33:19

标签: android sqlite android-recyclerview hashmap android-cardview

您好我在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);
    }
}

任何人都可以建议我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您需要将namelist的类型从LinkedHashMap<String,String>更改为LinkedHashMap<String,DictObjectModel>。从数据库加载数据时,您需要遍历cursor中的每个项目,从中构建一个DictObjectModel对象,然后将DictObjectModel对象放入您的LinkedHashMap中,例如namelist.put(cursor.getString(ii), myDictObjectModel)。并且您可能想要将namelist重命名为dictionary。希望这会有所帮助!