Reputation: 67
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
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
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
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
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
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