shubham kumbhar
shubham kumbhar

Reputation: 67

spinner key and value

I am creating a translater app in which user need to choose the target language if suppose he choose marathi from the spinner then value for the marathi should be 'mr' so i can pass that value in url. I have created a spinner and assigned languages from strings.xml but I want to use it's short form like for hindi the value should be hi, how can I achieve that?

    <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>

Upvotes: 2

Views: 2757

Answers (5)

Patrick R
Patrick R

Reputation: 6857

You can add one string array with short names corresponding to languages array you already have, and fetched short language name by using position in "onItemSelected".

Following is a simplest way to achieve desired output:

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) {
            }
        });
    }
}

Upvotes: 0

amin mahmoudi
amin mahmoudi

Reputation: 660

you can create tow list like

 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");

then add first one to 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);

finally with implements AdapterView.OnItemSelectedListener and andspinner.setOnItemSelectedListener(this); to get equivalent value use below code:

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

Upvotes: 0

Rajen Raiyarela
Rajen Raiyarela

Reputation: 5636

One way to achieve that is by using Map as suggested by @Vivek Mishra (in comments) where key will be your language name to be displayed in spinner and value will be the language code you want to pass in URL.

Map will look something like below

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

Now when you want to use, get the String from the spinner, selected by User and get language code value by

languageMap.get("Marathi")

Another option to integrate with your current implementation, is to add language code array in String.xml in same order as language name array and get the same index from language code array as per the selected index of spinner.

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

Upvotes: 0

Vivek Mishra
Vivek Mishra

Reputation: 5705

You can create a Map object for your above functionality. You can create something like this.

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

You can reverse the order of the key and value according to your need. For populating your spinner you can get all the keys and put in a list and then add it to your spinner. You can do it like this

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

Upvotes: 1

Bishoy Kamel
Bishoy Kamel

Reputation: 2355

I would go for map instead.

1-create the languages map

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

2-get the selected item

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

Upvotes: 2

Related Questions