用spinner下拉 - 无法找到id

时间:2013-11-19 03:58:29

标签: android spinner android-spinner

我正在尝试使用Spinner创建一个下拉列表,但是很长时间都遇到了问题。我也过了Good Developers Spinners here也是一个很好的例子。但我有一个问题,无法解决它。 我的main_activity.java

package com.example.dropdown;

import android.os.Bundle;
import android.app.Activity;
import android.widget.Button;
import android.widget.Spinner;

public class MainActivity extends Activity {

private Spinner spinner1, spinner2;
private Button button;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    addItemsOnSpinner2();
    addListenerOnButton();
   addListenerOnSpinnerItemSelection();


}




// add items into spinner dynamically
  public void addItemsOnSpinner2() {
      spinner2 = (Spinner)findViewById(R.id.spinner2);



  }




private void addListenerOnButton() {
    // TODO Auto-generated method stub

}




private void addListenerOnSpinnerItemSelection() {
    // TODO Auto-generated method stub

}
}

my strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">AndroidSpinner</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>   
    <string name="select">Choose a country</string>
    <string name="select2">Choose an item</string>
    <string name="button_label">Submit</string>

    <string-array name="country_array">
        <item>Greece</item>
        <item>United Kingdom</item>
        <item>Italy</item>
        <item>France</item>
        <item>Germany</item>
        <item>Turkey</item>
        <item>Poland</item>
        <item>India</item>
    </string-array>

</resources>

和我的activity_main.xml(布局):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/country_array"
    android:prompt="@string/select"/>

<Spinner
    android:id="@+id/spinner2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/select2" />

<Button
    android:id="@+id/button"
    android:layout_width="227dp"
    android:layout_height="wrap_content"
    android:text="@string/button_label" />

</LinearLayout>

在这里,我是否在命名

时做错了什么
android:id="@+id/spinner2" 

因为我无法在我的主要活动课程中通过id找到它。它向我显示以下错误:

  

spinner2无法解析或不是字段

enter image description here

2 个答案:

答案 0 :(得分:1)

同一视图中的两个微调器可能有点棘手,但它是可行的。由于我对android比较陌生,所以我有点不愿意发表回答,但在这里:

首先,我通常在活动中使用片段,但无论哪种方式,我相信你可以使用LayoutInfater类来扩充布局。您的活动中有类似的事情:

 LayoutInflater inflater = this.getLayoutInflater();
 View view = inflater.inflate(R.id.yourlayout, null);

将视图传递给您的spinnner方法:

 getSpinner1(view);
 getSpinner2(view);

现在是棘手的部分。您可以使用与此类似的详细信息调用上述方法:

public void getStateSpinner(View view) {    
    Spinner spinner = (Spinner) view.findViewById(R.id.YourSpinner1Id);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this, R.array.spinner1_array, 
            android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setVisibility(0);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new Spinner1OnItemSelectedListener());
}

public void getStateSpinner(View view) {    
    Spinner spinner = (Spinner) view.findViewById(R.id.YourSpinner2Id);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this, R.array.spinner2_array, 
            android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setVisibility(0);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new Spinner2OnItemSelectedListener());
}

然后我使用2个静态内部类来实现两次OnItemSelectedListener接口:

public static class Spinner1OnItemSelectedListener implements   OnItemSelectedListener{

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
            long id) {
        // TODO Auto-generated method stub
        spinner1Variable = parent.getItemAtPosition(pos).toString();

    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

}

就是这样。

正如我所说,我使用了片段,所以你的实现会有所不同。由于您正在使用某个活动,因此我在使用getActivity()的几个地方替换了“this”。

我希望这足以让你朝着正确的方向前进。

小心,

道格

}

public static class Spinner2OnItemSelectedListener implements OnItemSelectedListener{

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
            long id) {
        // TODO Auto-generated method stub
        spinner2Varialbe = parent.getItemAtPosition(pos).toString();

    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }

答案 1 :(得分:0)

我尝试了你的代码并且工作正常。我没有发现任何缺陷。 所以我建议你删除项目,再次下载并导入项目并检查它是否会导致问题呢?