【问题标题】:spinner key and value微调器键和值
【发布时间】:2018-02-07 05:36:06
【问题描述】:

我正在创建一个翻译应用程序,如果假设他从微调器中选择马拉地语,则用户需要在其中选择目标语言,那么马拉地语的值应该是“mr”,这样我就可以在 url 中传递该值。 我创建了一个spinner 并从strings.xml 分配了语言,但我想使用它的缩写形式,例如hindi,值应该是hi,我该如何实现?

    <string-array name="languages">
    <item>Marathi</item>
    <item>Hindi</item>
    <item>Japanese</item>
    <item>Russian</item>
    <item>Bengali</item>
    <item>Greek</item>
    <item>Gujarati</item>
    <item>Italian</item>
    <item>Malayalam</item>
    <item>German</item>
    <item>Punjabi</item>
    <item>Tamil</item>
    <item>Telugu</item>
    <item>French</item>
    <item>Urdu</item>
</string-array>

【问题讨论】:

  • 你能解释一下完整的用例吗?更多解释表示赞赏。
  • 你想要子字符串吗?
  • 创建一个 Map 而不是字符串数组。在您的 java 类中创建该映射并将这些值放入您的映射中
  • 问题已编辑。
  • 这就像 value 和 key 但我不知道如何实现它

标签: android spinner


【解决方案1】:

我会选择地图。

1-创建语言地图

Map<String, String> languages = new HashMap<>();
        languages.put("hindi", "hi");
        languages.put("arabic", "ar");
        languages.put("english", "en");

2-获取选中项

    String selectedLanguage = mySpinner.getSelectedItem().toString();
    String languageToSend=languages.get(selectedLanguage); //send it to url

【讨论】:

    【解决方案2】:

    您可以为上述功能创建一个 Map 对象。你可以创建这样的东西。

    Map<String, String> map = new HashMap<String, String>();
    map.put("Hindi", "Hi");
    map.put("Marathi", "Mi");
    

    您可以根据需要颠倒键和值的顺序。为了填充您的微调器,您可以获得所有键并放入一个列表,然后将其添加到您的微调器。你可以这样做

    List<String> l = new ArrayList<String>(map.keySet());
    

    【讨论】:

      【解决方案3】:

      实现此目的的一种方法是使用 @Vivek Mishra 建议的 Map(在 cmets 中),其中 key 将是您要在微调器中显示的语言名称,而 value 将是您要在 URL 中传递的语言代码。

      地图如下所示

      languageMap.put ("Marathi","mr");
      languageMap.put ("Hindi","hi");
      

      现在,当您要使用时,从微调器中获取字符串,由用户选择并获取语言代码值

      languageMap.get("Marathi")
      

      与当前实现集成的另一个选项是在 String.xml 中添加语言代码数组,其顺序与语言名称数组相同,并根据微调器的选定索引从语言代码数组中获取相同的索引。

      <string-array name="languages_code">
          <item>mr</item>
          <item>hi</item>
          <!-- Add entries for other languages -->
      </string-array>
      

      【讨论】:

        【解决方案4】:

        你可以像这样创建拖车列表

         List fullname= new ArrayList();
            fullname.add("hindia");
            fullname.add("persian");
            fullname.add("english");
         List urlName= new ArrayList();
            urlName.add("hin");
            urlName.add("per");
            urlName.add("eng");
        

        然后将第一个添加到 spiner

           ArrayAdapter dataAdapter = new ArrayAdapter(context, R.layout.spinner_dropdown, fullname);
        
            // Drop down layout style - list view with radio button
           // dataAdapter.setDropDownViewResource(R.layout.spinner_item);
            // attaching data adapter to spinner
            spinner.setAdapter(dataAdapter);
        

        最后实现了 AdapterView.OnItemSelectedListener 和 andspinner.setOnItemSelectedListener(this); 要获得等效值,请使用以下代码:

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, 
        long l) {
           String  url=urlName.get(i);
        }
        

        【讨论】:

          【解决方案5】:

          您可以添加一个短名称的字符串数组,对应您已有的语言数组,并使用“onItemSelected”中的位置获取短语言名称。

          以下是实现所需输出的最简单方法:

          Strings.xml

              <string-array name="languages">
                  <item name="">Marathi</item>
                  <item>Hindi</item>
                  <item>Japanese</item>
                  <item>Russian</item>
                  <item>Bengali</item>
                  <item>Greek</item>
                  <item>Gujarati</item>
                  <item>Italian</item>
                  <item>Malayalam</item>
                  <item>German</item>
                  <item>Punjabi</item>
                  <item>Tamil</item>
                  <item>Telugu</item>
                  <item>French</item>
                  <item>Urdu</item>
              </string-array>
          <string-array name="sr_languages">
                  <item name="">Ma</item>
                  <item>Hi</item>
                  <item>Ja</item>
                  <item>Ru</item>
                  <item>Be</item>
                  <item>Gr</item>
                  <item>Gu</item>
                  <item>It</item>
                  <item>Ma</item>
                  <item>Ge</item>
                  <item>Pu</item>
                  <item>Ta</item>
                  <item>Te</item>
                  <item>Fr</item>
                  <item>Ur</item>
              </string-array>
          

          SpinnerActivity.java

          package com.example.sonias.stackoverflowdemos;
          
          import android.os.Bundle;
          import android.support.v7.app.AppCompatActivity;
          import android.view.View;
          import android.widget.AdapterView;
          import android.widget.ArrayAdapter;
          import android.widget.Spinner;
          import android.widget.TextView;
          import android.widget.Toast;
          
          import java.util.ArrayList;
          import java.util.Arrays;
          
          public class SpinnerActivity extends AppCompatActivity {
              private Spinner spLanguage;
              private ArrayAdapter<String> spAdapter;
              private String mSelectedLanguage = "";
              private ArrayList<String> LanguagesList;
              private ArrayList<String> srLanguagesList;
          
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.spinner);
                  spLanguage = (Spinner) findViewById(R.id.spLanguage);
                  LanguagesList = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.languages)));
                  srLanguagesList = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.sr_languages)));
                  spAdapter = new ArrayAdapter<>(SpinnerActivity.this, android.R.layout.simple_list_item_1, LanguagesList);
                  spLanguage.setAdapter(spAdapter);
                  spLanguage.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                      @Override
                      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                          String mSelectedTExt = ((TextView) view.findViewById(android.R.id.text1)).getText().toString();
                          mSelectedLanguage = srLanguagesList.get(position);
                          Toast.makeText(SpinnerActivity.this, "You have selected " + mSelectedTExt + " ( " + mSelectedLanguage + " )", Toast.LENGTH_SHORT).show();
                      }
          
                      @Override
                      public void onNothingSelected(AdapterView<?> parent) {
                      }
                  });
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2014-09-02
            • 2013-09-10
            • 1970-01-01
            • 1970-01-01
            • 2012-11-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多