获取Android Spinner ID

时间:2016-09-06 04:45:11

标签: java android

我刚刚在一周前学习了android studio,因此,如果我不太了解,我很抱歉。

我正在写一个有趣的应用程序,名为" Sell-A-Planet"。 (不是我承诺的学校作业!

我的想法是创建一个包含行星列表(地球,火星,木星)的简单微调器,然后每当用户选择不同的行星时,总价格就会更新。

不幸的是,我已经遇到了微调器的问题。无论如何,这是我的代码:

activity_main.xml中

<Spinner
        android:id="@+id/planets_spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

的strings.xml

<resources>
  <string name="app_name">Spinner Practice</string>

  <string-array name="planets_array">
    <item> Mercury ($100 billion)</item>
    <item> Venus ($200 billion)</item>
    <item> Mars ($300 billion)</item>
  </string-array>
</resources>

然后我从android开发者和另一个网站上读到,我必须创建这样的新java类:

spinnerList.java

public class spinnerActivity implements OnItemSelectedListener {

     public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
         "OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(),
            Toast.LENGTH_SHORT).show();
     }

     public void onNothingSelected(AdapterView<?> parent) {
         // Another interface callback
     }
}

MainActivity.java

public void addListenerOnSpinnerItemSelection() {
     Spinner spinnerPlanet = (Spinner) findViewById(R.id.planets_spinner);
     spinnerPlanet.setOnItemSelectedListener(new spinnerActivity ());
}

在这个阶段,我试图通过使用toast打印所选值来测试微调器是否有效。然而,每当我改变地球时,它都不会显示任何东西。

任何人都可以告诉我为什么这些不起作用?

此外,是否也可能(稍后)不同的星球将动态显示不同的总价格?

谢谢!

2 个答案:

答案 0 :(得分:2)

你应该按照以下方法填充一个微调器。首先在Xml中创建微调器

 <Spinner
        android:id="@+id/spinnerplanet"
        android:layout_width="match_parent"
        android:layout_height="58dp"
        style="@style/spinner_style"
        android:spinnerMode="dropdown"/>

然后在你的MainActivity中,你应该通过它的id调用微调器,然后为它创建一个适配器。

        spinnerplanetshow= (Spinner) findViewById(R.id.spinnerplanet);

        adapterModule = new ArrayAdapter<String(getApplicationContext(), R.layout.spinner_item, your Array);

    spinnerplanetshow.setAdapter(adapterModule);

现在你的行星名称数组将被填充到spinner中。用价格随意填充另一个数组,然后你需要使用OnItemSelected Listener,它将根据选定的行星来改变价格。

    spinnerplanetshow.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                                   int position, long id) {
            if (position == 0) {
       System.out.println("position is 0");
              //Set the string you want to show on click of first   position in spinner.


            } else if (position == 1) {
              System.out.println("position is 1");
    Toast.maketext(getApplicationContext,"position is 1",LENGTH.LONG).show();
             //Set the string you want to show on click of second position in spinner.  

这是您实现理想结果的方式。 }

答案 1 :(得分:1)

完整的工作演示

MainActivity

public class MainActivity extends AppCompatActivity {

    private Context context;
    Spinner spinner;
    private TextView mTextView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;

        List<String> categories = new ArrayList<String>();
        categories.add("A");
        categories.add("B");
        categories.add("C");
        categories.add("D");

        mTextView = (TextView) findViewById(R.id.textView2);
        mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "your selected id is  " + spinner.getSelectedItemId(), Toast.LENGTH_LONG).show();
            }
        });

        spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(dataAdapter);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, "you selected " + spinner.getSelectedItem(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                Toast.makeText(MainActivity.this, "Nothing selected", Toast.LENGTH_LONG).show();
            }
        });
    }
}

<强> activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/base"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="horizontal">


    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_margin="10dp"
        android:text="Click to get selected item"
        android:textSize="20dp" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView2"
        android:layout_centerHorizontal="true" />
</RelativeLayout>