2016-02-17 3 views
2

Я хочу реализовать инвертор android с ключевым значением.Лучшая практика для реализации пары ключ-значение в android Spinner

ан: английский JP: японский

И когда пользователь выбирает и пункт я хочу, чтобы сохранить ключ к базе данных. А также при следующей загрузке я хочу, чтобы spinner выбрал положение вращающихся частиц.

Может ли кто-нибудь рассказать мне, что является лучшим способом реализовать это.

Я попытался следующие, но не встретил мои требования https://gist.github.com/granoeste/2786663 Set Key and Value in spinner

Написать в настоящее время я использую LinkedHashMapAdapter. Но проблема в том, что здесь мне нужно сохранить позицию в БД или локальных общих предпочтениях. Я не думаю, что это лучшее решение

Текущая реализация

LinkedHashMap localeList = new LinkedHashMap<>(); 

     for (Map.Entry<String, String> val : map.entrySet()) { 
      int resourceId = getResources().getIdentifier(val.getValue(), "string", getPackageName()); 
      localeList.put(val.getKey(), getResources().getString(resourceId)); 

     } 
     LinkedHashMapAdapter<String, String> arrayAdapter = new LinkedHashMapAdapter<>(this, R.layout.spinner_layout, localeList); 
     arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     mLocale.setAdapter(arrayAdapter); 
     String localPosSelected = PreferencesHelper.getSharedPreferenceString(this, Constants.PREF_LOCALE_POS_KEY); 
     if(localPosSelected!=null){ 
      mLocale.setSelection(Integer.parseInt(localPosSelected)); 
     } 

Также есть опция для выбранного пункта Spinner значением

ответ

7

установка Spinner:

 spLang = (Spinner)view.findViewById(R.id.spLang); 
     spLang.setOnItemSelectedListener(this); 
     ArrayList<String> sp_Lang = new ArrayList<String>(); 
     sp_Lang.add("english"); 
     sp_Lang.add("french"); 
     ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_spinner_item, sp_Lang); 
     spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spLang.setAdapter(spinnerAdapter); 

Для Perticular Spinner Выбор пункта:

int Position = spinnerAdapter.getPosition("Japanese"); 
spLang.setSelection(Position); 

Первый Создать HashMap для хранения ключа и пары значений

HashMap<String ,String> hmLang = new HashMap<String,String>(); 

Теперь Добавить значение как это в HashMap:

hmLang.put("english" ,"en"); 

Здесь в ключе HashMap = YourValue и Value = yourKey

@Override 
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) { 
    switch(adapterView.getId()) 
    { 
     case R.id.spLang: 
     String lang_Name = adapterView.getItemAtPosition(position).toString(); 
     String lang_Key = hmLang.get(lang_Name); 
     break 

    } 

Если у вас есть какие-либо проблемы с этим кодом, пожалуйста, спросите

+1

Можете ли вы рассмотреть этот сценарий. Я сохранил JP в базе данных. И в следующей загрузке я хочу, чтобы JP (японский) был предварительно выбран в spinner. – Rahul

+0

Пожалуйста, проверьте мой Обновленный ответ и идите дальше. Если этот ответ будет полезен, тогда дайте ему право голоса. –

+0

Вы предлагаете мне поддерживать как ArrayList, так и HashMap? – Rahul

0

Вы можете сохранить выбранный spinner позицию элемента в базе данных и в следующий раз установить spinner деталь сохраненной позиции

Чтобы получить позицию:
int position = spinner1.getSelectedItemPosition();

Для установки:
spinner.setSelection(position);

обратите внимание, что вы должны вызвать метод setSelection() после установки spinneradapter

+0

Я wan't, чтобы сохранить ключ 'EN', в базе данных нет позиции. Это было мое требование – Rahul

0

вы можете создать custom adapter for spinner для достижения этой цели.

С использованием пользовательского адаптера

  • вы можете использовать свой hashMap для пары ключей значения.
  • вы можете передать свое собственное представление для изменения.
1

Я создал с использованием адаптера HashMap для использования в этих сценариях.Также смотрите пример проекта here

mapData = new LinkedHashMap<String, String>(); 

    mapData.put("shamu", "Nexus 6"); 
    mapData.put("fugu", "Nexus Player"); 
    mapData.put("volantisg", "Nexus 9 (LTE)"); 
    mapData.put("volantis", "Nexus 9 (Wi-Fi)"); 
    mapData.put("hammerhead", "Nexus 5 (GSM/LTE)"); 
    mapData.put("razor", "Nexus 7 [2013] (Wi-Fi)"); 
    mapData.put("razorg", "Nexus 7 [2013] (Mobile)"); 
    mapData.put("mantaray", "Nexus 10"); 
    mapData.put("occam", "Nexus 4"); 
    mapData.put("nakasi", "Nexus 7 (Wi-Fi)"); 
    mapData.put("nakasig", "Nexus 7 (Mobile)"); 
    mapData.put("tungsten", "Nexus Q"); 

    adapter = new LinkedHashMapAdapter<String, String>(this, android.R.layout.simple_spinner_item, mapData); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    spinner = (Spinner) findViewById(R.id.spinner); 
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(this); 
+0

Я попытался использовать это, но не могли бы вы рассказать мне, как получить ключ и значение выбранного элемента. А также как установить счетчик с определенным значением – Rahul

+0

Можете ли вы рассмотреть этот сценарий. Я сохранил JP в базе данных. И в следующей загрузке я хочу, чтобы JP (японский) был предварительно выбран в spinner. – Rahul

0

Наполнять Spinner

void populateRecordPerPageSpinner(LinkedTreeMap<String, String> map) { 
     String selectedValue = PreferencesHelper.getSharedPreferenceString(context, Constants.PREF_RECORD_PER_PAGE_KEY); 
     List<String> recordPerPageList = new ArrayList(); 

     for (Map.Entry<String, String> val : map.entrySet()) { 
      int resourceId = getResources().getIdentifier(val.getValue(), "string", getPackageName()); 
      recordPerPageMap.put(val.getKey(), getResources().getString(resourceId)); 
      recordPerPageList.add(getResources().getString(resourceId)); 
     } 
     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, R.layout.spinner_layout, recordPerPageList); 
     arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     mRecordPerPage.setAdapter(arrayAdapter); 
     mRecordPerPage.setSelection(arrayAdapter.getPosition(selectedValue)); 

    } 

Fetch и сохранить позиции в предпочтении

selectedRecPerPage = recordPerPageMap.get(mRecordPerPage.getAdapter().getItem(recordPerPagePosition)); 
PreferencesHelper.setSharedPreferenceString(context, Constants.PREF_RECORD_PER_PAGE_KEY, selectedRecPerPage); 
Смежные вопросы