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
}
}
XML-Layout:
<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>
Ich bin ein neuer Android-Programmierer und habe Probleme mit Spinner, ich habe mehrere Tutorials ausprobiert und bin immer noch verwirrt. Ich würde gerne wissen, was mein nächster Schritt hier ist, soweit ich weiß, dass ich meinen Spinner in XML eingerichtet habe. In Java habe ich diesen Spinner identifiziert, einen ArrayAdapter für diesen Spinner erstellt und einige Optionen angegeben. Ich bin mir nicht sicher, ob ich den Spinner schon bestückt habe oder wie man das Spinnerobjekt manövriert. Ich möchte in der Lage sein, das Spinnerobjekt zu verwenden, um eine von drei Optionen auszuwählen und diesen Wert dann innerhalb der Textansicht im Spinner zu behalten.
Du bist fast da. Wie Sie sehen, gibt die Variable onItemSelected
einen Parameter position
aus. Sie können diesen Befehl verwenden, um das Objekt von Ihrem Adapter abzurufen, wie in getItemAtPosition(position)
.
Beispiel:
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();
}
Dadurch wird eine Nachricht auf dem Bildschirm eingeblendet, wobei das ausgewählte Element mit seiner toString () -Methode gedruckt wird.
Wenn Sie den Listener nicht implementieren möchten, können Sie ihn direkt dort einrichten, wo Sie ihn haben möchten (Aufruf Ihres Spinners after Ihr Adapter wurde eingestellt):
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
}
});
Eine andere Sache: Wenn Sie mehrere Spinner in Ihrem Layout haben, müssen Sie eine Schalterauswahl in der Methode onItemSlected () implementieren, um zu wissen, auf welches Widget geklickt wurde. Etwas wie das:
@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)
Sollte unter Spinner firstSpinner = (Spinner) findViewById(R.id.spinner1);
Auf onCreate
liegen.
Für Kotlin und Bindings lautet der Code:
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
}
});
Ich denke, das kommt Ihnen zugute Versuchen Sie, dies zu verwenden, um die Sprache in meiner Anwendung zu ändern.
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
}
});
und das ist mein String-Array
<string-array name="lang_array">
<item>french</item>
<item>arabic</item>
<item>english</item>
</string-array>