package org.example.mbtiapplication;
import Android.os.Bundle;
import Android.app.Activity;
import Android.view.Menu;
import Android.view.View;
import Android.widget.AdapterView;
import Android.widget.AdapterView.OnItemClickListener;
import Android.widget.AdapterView.OnItemSelectedListener;
import Android.widget.ArrayAdapter;
import Android.widget.Spinner;
public class MBTITest extends Activity implements OnItemSelectedListener {
private Spinner firstSpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mbtitest);
Spinner firstSpinner = (Spinner) findViewById(R.id.spinner1);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.spinnerarraybool, Android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
firstSpinner.setAdapter(adapter);
}
@Override
public void onItemSelected(AdapterView<?> parent, View v, int position,
long id) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
Mise en page XML:
<TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<TableRow
Android:layout_width="match_parent"
Android:layout_height="wrap_content" >
<TextView
Android:layout_width="120dp"
Android:layout_height="match_parent"
Android:layout_marginLeft="5dp"
Android:gravity="center_vertical"
Android:text="I like to go out more than staying home." />
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</TableRow>
<TableRow
Android:layout_width="match_parent"
Android:layout_height="wrap_content" >
<TextView
Android:layout_width="120dp"
Android:layout_height="match_parent"
Android:layout_marginLeft="5dp"
Android:gravity="center_vertical"
Android:textSize="10.5dp"
Android:text="Sensing v Intuition" />
<Spinner
Android:id="@+id/spinner2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
</TableRow>
</TableLayout>
Je suis un nouveau programmeur Android et je ne parviens pas à utiliser Spinner. J'ai essayé plusieurs tutoriels et je suis toujours perplexe. J'aimerais savoir quelle est ma prochaine étape, pour autant que je sache, j'ai configuré mon spinner en XML. En Java, j'ai identifié ce spinner, créé un ArrayAdapter pour ledit spinner et spécifié certaines options. Je ne suis pas sûr d'avoir déjà rempli le casserole ou de savoir comment utiliser l'objet casserole. J'aimerais pouvoir utiliser l'objet spinner pour sélectionner l'une des trois options, puis conserver cette valeur dans la vue texte à l'intérieur du spinner.
Tu y es presque. Comme vous pouvez le constater, la variable onItemSelected
vous donnera un paramètre position
que vous pouvez utiliser pour récupérer l'objet de votre adaptateur, comme dans getItemAtPosition(position)
.
Exemple:
spinner.setOnItemSelectedListener(this);
...
public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
Toast.makeText(parent.getContext(),
"OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(),
Toast.LENGTH_SHORT).show();
}
Cela mettra un message à l'écran, avec l'élément sélectionné imprimé par sa méthode toString ().
Si vous ne souhaitez pas implémenter le programme d'écoute, vous pouvez le configurer directement là où vous le souhaitez (appelez votre spinner after votre adaptateur a été défini):
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
Toast.makeText(parent.getContext(), "Spinner item 1!", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(parent.getContext(), "Spinner item 2!", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(parent.getContext(), "Spinner item 3!", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// sometimes you need nothing here
}
});
Autre chose: Lorsque vous avez plusieurs spinner dans votre présentation, vous devez implémenter une sélection de commutateur dans la méthode onItemSlected () pour savoir quel widget a été cliqué. Quelque chose comme ça:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()){
case R.id.sp_alarmSelection:
//Do something
Toast.makeText(this, "Alarm Selected: " + parent.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
break;
case R.id.sp_optionSelection:
//Do another thing
Toast.makeText(this, "Option Selected: " + parent.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
break;
}
}
Joseph: spinner.setOnItemSelectedListener(this)
Devrait être inférieur à Spinner firstSpinner = (Spinner) findViewById(R.id.spinner1);
Sur onCreate
Pour Kotlin et les liaisons, le code est le suivant:
binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onNothingSelected(parent: AdapterView<*>?) {
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
}
}
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//check if spinner2 has a selected item and show the value in edittext
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// sometimes you need nothing here
}
});
spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//check if spinner1 has a selected item and show the value in edittext
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// sometimes you need nothing here
}
});
Je pense que cela vous sera utile Essayez ceci que j'utilise pour changer la langue de mon application
String[] districts;
Spinner sp;
......
sp = (Spinner) findViewById(R.id.sp);
districts = getResources().getStringArray(R.array.lang_array);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, Android.R.layout.simple_spinner_item,districts);
sp.setAdapter(adapter);
sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub
int index = arg0.getSelectedItemPosition();
Toast.makeText(getBaseContext(), "You select "+districts[index]+" id "+position, Toast.LENGTH_LONG).show();
switch(position){
case 0:
setLocal("fr");
//recreate();
break;
case 1:
setLocal("ar");
//recreate();
break;
case 2:
setLocal("en");
//recreate();
break;
default: //For all other cases, do this
setLocal("en");
//recreate();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
et c'est mon tableau de chaînes
<string-array name="lang_array">
<item>french</item>
<item>arabic</item>
<item>english</item>
</string-array>