ArrayList不会出现在Spinner上

问题描述 投票:0回答:6

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

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

我在这里错过了什么吗?

注意:昨天我尝试使用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" />
android android-arrayadapter android-spinner android-xml android-adapter
6个回答
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
投票

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

如果你的代码在Activity中,那么用this替换YourActivity.this,或者如果它在Fragment中,那么使用getActivity()或使用Application context 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();

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) {

    }
});

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) {

        }
    });
}
} 

1
投票

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

String Text = mySpinner.getSelectedItem().toString();
Toast.makeText(this,Text,Toast.LENGTH_LONG).show();

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


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" />
© www.soinside.com 2019 - 2024. All rights reserved.