0

我遇到的问题是我想spinner2在选择(例如)加拿大之后进行填充,但由于某种原因spinner2,在启动时而不是在我选择加拿大之后填充。我还连接了一个字符串数组,spinner2以确保它会在没有任何内容的情况下启动,但它仍然无法正常工作。这是我到目前为止所拥有的:

public class MainActivity extends Activity {

    private Spinner spinner1, spinner2;
    private Button button;

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

        addListenerOnButton();
        addListenerOnSpinnerItemSelection();
        spinner1 = (Spinner) findViewById(R.id.spinner1);

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
        R.array.countries, 
        android.R.layout.simple_list_item_1);

        spinner1.setAdapter(adapter);

        spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
                TextView tv = (TextView)v;   // cast the View to a TextView
                if ("Canada".equals(tv.getText().toString()));
                {
                    addItemsOnSpinner2();
                }
            }

            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });
    }     


    // add items into spinner dynamically

    public void addItemsOnSpinner2() {     

        spinner2 = (Spinner) findViewById(R.id.spinner2);
        List list = new ArrayList();
        list.add("hello");
        list.add("holla");
        list.add("hey");
        list.add("hi");
        ArrayAdapter dataAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, list);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner2.setAdapter(dataAdapter);
    }     



    public void addListenerOnSpinnerItemSelection() {     
        spinner1 = (Spinner) findViewById(R.id.spinner1);     
        spinner2 = (Spinner) findViewById(R.id.spinner2);     
        spinner1.setOnItemSelectedListener(new Spinner2());     
        spinner2.setOnItemSelectedListener(new Spinner2());     


    }     

    public void addListenerOnButton() {     

        button = (Button) findViewById(R.id.button1);

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(MainActivity.this,
                    "Result : " + 
                    "\nSpinner 1 : "+ String.valueOf(spinner1.getSelectedItem()) +
                    "\nSpinner 2 : "+ String.valueOf(spinner2.getSelectedItem()), Toast.LENGTH_SHORT).show();
            }

        });
    }     
}     

Spinner2.java*

public class Spinner2 implements OnItemSelectedListener {     

    @Override
    public void onItemSelected(AdapterView parent, View view, int pos, long id) {
        Toast.makeText(parent.getContext(), 
            parent.getItemAtPosition(pos).toString(), 
            Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView parent) {

    }
}     
4

2 回答 2

0

这是交易..onItemSelected当 Spinner 刚刚创建而您没有选择任何选项时,仍然会调用该方法。一个简单的解决方法是在微调器中添加一个额外的选项“选择”或“无”,并if-else在方法中有一个构造,onItemSelected如下所示:-

@Override
public void onItemSelected(AdapterView parent, View view, int pos, long id) {
    if(pos==0) {
        //do something;
    } else {
        Toast.makeText(parent.getContext(), 
            parent.getItemAtPosition(pos).toString(), 
            Toast.LENGTH_SHORT).show();
    }
}
于 2013-10-26T04:07:13.153 回答
0

正如@d3m0li5h3r 正确提到的

当 Spinner 刚刚初始化时,仍然会调用 onItemSelected 方法

所以,这是一个解决方法,而不是在微调器中添加额外的元素,..

    spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
    boolean check = false;

                public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
                 if(count){
                    TextView tv = (TextView)v;   // cast the View to a TextView
                    if ("Canada".equals(tv.getText().toString()));
                    {
                        addItemsOnSpinner2();
                    }
                }
                  check = true;
                }

                public void onNothingSelected(AdapterView<?> arg0) {

                }
            });
于 2013-10-26T04:13:49.183 回答