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レイアウト:
<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>
私は新しいAndroidプログラマーであり、Spinnerの使用に問題があるため、複数のチュートリアルを試してみましたが、まだ混乱しています。次のステップがここにあることを知りたいJavaで、スピナーをXMLで設定したことを知っています。そのスピナーを識別し、そのスピナー用のArrayAdapterを作成し、いくつかのオプションを指定しました。スピナーオブジェクトまたはスピナーオブジェクトの操作方法スピナーオブジェクトを使用して3つのオプションのいずれかを選択し、その値をスピナー内のテキストビュー内に保持できるようにしたいと思います。
あなたはほとんどそこにいます。ご覧のとおり、onItemSelected
はposition
パラメーターを提供します。これを使用して、getItemAtPosition(position)
のようにアダプターからオブジェクトを取得できます。
例:
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();
}
これにより、画面にメッセージが表示され、選択した項目がtoString()メソッドによって出力されます。
リスナーを実装したくない場合は、次のようにリスナーを必要な場所に直接設定できます(スピナーで呼び出しますafterアダプターが設定されています)。
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
}
});
もう1つ:レイアウトに複数のスピナーがある場合は、onItemSlected()メソッドでスイッチ選択を実装して、クリックされたウィジェットを知る必要があります。このようなもの:
@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;
}
}
Kotlinおよびバインディングのコードは次のとおりです。
binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onNothingSelected(parent: AdapterView<*>?) {
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
}
}
ジョセフ:spinner.setOnItemSelectedListener(this)
はonCreate
のSpinner firstSpinner = (Spinner) findViewById(R.id.spinner1);
の下になければなりません
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
}
});
これはあなたに役立つと思います。これを試してみて、アプリケーションの言語を変更するために使用しています
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
}
});
これは私の文字列配列です
<string-array name="lang_array">
<item>french</item>
<item>arabic</item>
<item>english</item>
</string-array>