安卓-多个下拉框

14

我有这段代码:

package lijap.app.starcraft2counters;

import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class Settings extends Activity implements OnItemSelectedListener {
Spinner answertime;
Spinner gametime;
Spinner missesallowed;

String[] answerseconds = { "Unlimited", "1 second", "2 seconds", "3 seconds",
        "4 seconds", " 5 seconds" };

String[] gameminutes = { "Unlimited", "1 minute", "2 minutes", "3 minutes",
        "4 minutes", " 5 minutes" };

String[] numberofmisses = { "Unlimited", "5", "10", "15",
        "20", "25" };

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(Settings.this,
            android.R.layout.simple_spinner_item, gameminutes);

    answertime = (Spinner) findViewById(R.id.s_answertime);
    answertime.setAdapter(adapter);
    answertime.setOnItemSelectedListener(this);
}

@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    // TODO Auto-generated method stub


}

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

}
}

我正在尝试添加超过1个微调控件,但感到困惑。 我应该共享数组适配器还是为每个控件创建一个新的适配器? onItemSelected又该怎么办呢? 如上面的字符串所示,我想要三个微调控件。我应该如何做呢?

我是Android新手,需要您的帮助 - Lijap

2个回答

20

如果多个Spinner适配了相同的信息,您可以在它们之间共享适配器。但是请注意,每个适配器需要适配不同的一组String,所以您需要为每个Spinner创建一个ArrayAdapter

对于这3个Spinners,一个单独的OnItemSelectedListener就足够了(只要您设置了它们)。您可以在传递为参数的AdapterView<?>上调用getId()方法,以了解哪个Spinner触发了事件。

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    switch(arg0.getId()){
        case R.id.s_answertime:
            break;
        case ...
    }
}

1
还有另一个onItemSelected吗? - Lijap
2
你救了我的一天,我一直在使用 view.getId(),一直想不通为什么它不起作用。 - subash

7

请检查这个

yearDropdown.setOnItemSelectedListener(new OnItemSelectedListener() {

    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) 
    {
        selectedyear = parentView.getSelectedItemPosition();
        drpyear      = yearDropdown.getSelectedItem().toString();

        //your code here

    }

    public void onNothingSelected(AdapterView<?> parentView) 
    {
        selectedyear = 0;
        //return;
    }
});

monthDropdown.setOnItemSelectedListener(new OnItemSelectedListener() {

    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) 
    {
        //your code here


    }

    public void onNothingSelected(AdapterView<?> parentView) 
    {
        selectedmonth = 0;
        //return;
    }
});

dayDropdown.setOnItemSelectedListener(new OnItemSelectedListener() {

    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) 
    {
        //your code here

    }

    public void onNothingSelected(AdapterView<?> parentView) 
    {
        selectedday = 0;
    }
});

每个下拉框都需要创建对应的适配器。

   adapterYear = new ArrayAdapter<CharSequence>(this,android.R.layout.simple_spinner_item);
   yearDropdown.setAdapter(adapterYear);

   adapterMonth = new ArrayAdapter<CharSequence>(this,android.R.layout.simple_spinner_item);
   monthDropdown.setAdapter(adapterMonth);

   adapterDays = new ArrayAdapter<CharSequence>(this,android.R.layout.simple_spinner_item);
   dayDropdown.setAdapter(adapterDays);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接