ArrayList没有显示在Spinner

时间:2017-07-21 04:59:01

标签: android android-arrayadapter android-spinner android-xml android-adapter

我试图创建一个微调器,它显示数组列表中的数据列表。

当我点击下拉列表时,它会显示列表,但当我点击下拉列表中的某个项目时,它不会显示微调器上的值。

我在这里错过了什么吗?

注意:昨天我尝试使用Log.d()和System.out.println检查,itemOnSelected()没有,但今天它工作正常。也许我重建了这个项目,或者我在代码中更改了一些内容,但是在点击了微调器内的项目之后,微调器上的值仍然没有显示出来。

Spinner spnSubjectIDInfo;
ArrayList<String> subjectList;
ArrayAdapter<String> adpSubj;

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

    subjectList = new ArrayList<String>();
    subjectList .add("John");
    subjectList .add("Maxi");
    subjectList .add("Jeni");

    spnSubjectIDInfo = (Spinner) v.findViewById(R.id.spnSubjectIDInfo);
    adpSubj = new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_spinner_item, subjectList);
    adpSubj.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spnSubjectIDInfo.setAdapter(adpSubj);

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

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
}

XML

<Spinner
    android:id="@+id/spnSubjectIDInfo"
    android:layout_width="30dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="54dp"
    android:layout_centerHorizontal="true" />

6 个答案:

答案 0 :(得分:2)

试试这个

     AdapterView.OnItemSelectedListener() { 
@Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(ActivityName.this, subjectList.get(position).toString() " selected", Toast.LENGTH_SHORT).show();
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) {

    } 
    });

答案 1 :(得分:1)

希望这会对你有所帮助。

public class SpinnerTest extends AppCompatActivity {

private ArrayList<String> subjectList;
private ArrayAdapter<String> adpSubj;
private Spinner spinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_spinner_test);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    spinner= (Spinner) findViewById(R.id.spnSubjectIDInfo);

    subjectList = new ArrayList<String>();
    subjectList .add("John");
    subjectList .add("Maxi");
    subjectList .add("Jeni");

    adpSubj = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, subjectList);
    adpSubj.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adpSubj);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(getApplicationContext(), spinner.getItemAtPosition(position).toString() + " selected", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
}
} 

答案 2 :(得分:1)

您将错误的上下文传递给Toast实例:

如果您的代码位于Activity中,则将this替换为YourActivity.this,或者如果它位于Fragment中,则使用getActivity()或使用应用程序上下文getApplicationContext()。因为目前,this代表Spinner的onItemSelected侦听器上下文。

执行:

Toast.makeText(/*Your activity/application context*/, parent.getItemAtPosition(position)+ " selected", Toast.LENGTH_SHORT).show();

代替:

Toast.makeText(this, parent.getItemAtPosition(position)+ " selected", Toast.LENGTH_SHORT).show();

答案 3 :(得分:1)

将“this”更改为“ActvityName.this”或在Toast中使用“getApplicationContext()”,您将在toast中传递匿名类上下文。

如下所示:

spnSubjectIDInfo.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(ActivityName.this,parent.getItemAtPosition(position)+ " selected", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
});

答案 4 :(得分:1)

在Spinner中setOnItemSelectedListener方法不起作用。如果你想在吐司中显示选定的值,请使用此行

thead-inverse

它将返回所选值并将显示在Toast上。

答案 5 :(得分:0)

经过几次搜索后,我意识到我必须将微调器的宽度设置为wrap_content,因为值的长度不支持在单击项目后在微调器上显示它。

<Spinner
    android:id="@+id/spnSubjectIDInfo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="54dp"
    android:layout_centerHorizontal="true" />