【问题标题】:Prompt from Spinner is not showing the itemsSpinner 的提示未显示项目
【发布时间】:2012-05-29 15:48:52
【问题描述】:

我刚刚使用 Eclipse 创建了一个适用于 Android 的应用程序,并且一切正常,但是,当我单击 Spinner 时,提示似乎为空,但值在那里,因为我可以选择它们,我该怎么做才能使它们可见?模拟器上可以,手机上不行,谢谢!

空白方块是提示符,值在那里! :S

    String sqlSelect = "SELECT id, name, password FROM password";
    Cursor c = db.rawQuery(sqlSelect, null);            


    Spinner sp1 = (Spinner)findViewById(R.id.spinner1);
    ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
    ad.setDropDownViewResource(android.R.layout.simple_spinner_item);
    sp1.setAdapter(ad);        

    System.out.println("Total of records is:" + c.getCount());

    if(c.moveToFirst()){
        int i = 0;

        while(c.moveToNext()){
            ad.add(c.getString(c.getColumnIndex("name")));              
            i++;
        }
    }        

布局:

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
    <!-- Preview: listitem=@android:layout/simple_spinner_item -->
</Spinner>

这是一张图片:

http://img163.imageshack.us/img163/659/cap201205222344.jpg

【问题讨论】:

  • 能否请您发布您的代码和xml布局文件?

标签: android eclipse sqlite emulation spinner


【解决方案1】:

在您发布的图片中,您的微调器显示一些行意味着它从数据库中获取值,但您必须更改微调器项目的背景颜色。

文本大小和背景大小都是白色的,因此您无法在微调器视图中查看文本,因此请尝试使用自定义适配器创建微调器或更改微调器项:

ad.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

【讨论】:

    【解决方案2】:

    根据我找到的示例,我最终使用了 ArrayAdapter 的子类:

        ArrayAdapter<String> ad = new ArrayAdapter<String>(this,        android.R.layout.simple_spinner_item){
            @Override
            public View getDropDownView(int position, View convertView, ViewGroup parent) {
                View view = super.getDropDownView(position, convertView, parent);
    
                TextView text = (TextView)view.findViewById(android.R.id.text1);
                text.setTextColor(Color.BLUE);
    
                return view;
            }           
        };
    

    现在我可以看到这些项目,但我仍然想知道为什么我可以在模拟器上看到这些项目而不是手机本身...谢谢!!

    【讨论】:

      【解决方案3】:

      您可以使用notifyDataSetChanged(),这会导致重绘微调器。

      if(c.moveToFirst()){  
          int i = 0;  
          while(c.moveToNext()){  
              ad.add(c.getString(c.getColumnIndex("name")));                
              i++;  
      }  
      ad.notifyDataSetChanged();
      

      【讨论】:

        猜你喜欢
        • 2015-04-03
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-09
        相关资源
        最近更新 更多