web-dev-qa-db-ja.com

AndroidでonItemSelectedを使用するにはどうすればよいですか?

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つのオプションのいずれかを選択し、その値をスピナー内のテキストビュー内に保持できるようにしたいと思います。

あなたはほとんどそこにいます。ご覧のとおり、onItemSelectedpositionパラメーターを提供します。これを使用して、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()メソッドによって出力されます。

46
bgse

リスナーを実装したくない場合は、次のようにリスナーを必要な場所に直接設定できます(スピナーで呼び出します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
            }
        });
25
Azurespot

もう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;
    }
}
16
Jorge Torres

Kotlinおよびバインディングのコードは次のとおりです。

binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
            override fun onNothingSelected(parent: AdapterView<*>?) {
            }

            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
            }
        }
2
Ilja Popov

ジョセフ:spinner.setOnItemSelectedListener(this)onCreateSpinner firstSpinner = (Spinner) findViewById(R.id.spinner1);の下になければなりません

2
Tuan Do
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
            }
        });
0
Rohit Sharma

これはあなたに役立つと思います。これを試してみて、アプリケーションの言語を変更するために使用しています

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>
0
Said Erraoudy