【问题标题】:ArrayList doesn't show up on SpinnerArrayList 没有出现在 Spinner 上
【发布时间】:2017-07-21 04:59:01
【问题描述】:

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

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

我错过了什么吗?

注意:昨天我尝试使用 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" />

【问题讨论】:

  • 你可以尝试将“Toast.makeText(this..”改为“Toast.makeText(getBaseContext()”)
  • 'getItemAtPosition' 方法返回一个对象。您需要调用“toString()”方法来获取该对象的字符串表示形式。
  • 发布您的完整代码
  • 因为您尝试设置 2 次微调器(下拉)视图:adpSubj = new ArrayAdapter(this, android.R.layout.simple_spinner_item, subjectList); adpSubj.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);在适配器中只设置一次不需要setDropdownviewresource
  • 问题是您使用的是微调器 id,您必须为微调器类 ex 绑定微调器 id;微调器 spnSubjectIDInfo = (微调器) findViewById(R.id.spinner);

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


【解决方案1】:

试试这个

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

    } 
    });

【讨论】:

    【解决方案2】:

    您将错误的上下文传递给 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();
    

    【讨论】:

    • 很抱歉没有提早提到这一点,但实际上根本没有调用 onItemSelected()。我已经用 System.out.println() 对其进行了测试。吐司完全没有问题。
    【解决方案3】:

    将“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) {
    
        }
    });
    

    【讨论】:

    • 很抱歉没有提早提到这一点,但实际上根本没有调用 onItemSelected()。我已经用 System.out.println() 对其进行了测试
    【解决方案4】:

    希望这会对你有所帮助。

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

    【讨论】:

    • 很抱歉没有提早提到这一点,但实际上根本没有调用 onItemSelected()。我已经用 System.out.println() 对其进行了测试
    • 现在吐司已经显示了,但是在点击里面的项目后,微调器上的值没有显示出来。
    • 您必须使用 toString() 将其转换为字符串 检查此 Toast.makeText(this, parent.getItemAtPosition(position).toString()+ " selected", Toast.LENGTH_SHORT).show() ;
    【解决方案5】:

    在 Spinner 中的 setOnItemSelectedListener 方法不起作用。如果您想在 toast 中显示所选值,请使用此行

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

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

    【讨论】:

      【解决方案6】:

      经过几次搜索后,我意识到我必须将微调器的宽度大小设置为 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" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-18
        • 1970-01-01
        • 2015-08-04
        • 2016-12-14
        • 2018-01-08
        相关资源
        最近更新 更多