2014-09-26 87 views
1

我在我的一项活动中使用微调。问题是它显示了它的零索引元素作为标题。因此它出现两次,第一次出现在标题中,第二次出现在微调器的第一个元素上。我不想让选中的选项在Spinner中的标题下拉,因为它已经被选中了,那么它是如何使用它作为Spinner的第一选项。我想要在标题和Spinner列表中选项的其余部分选中选项。看看我的代码 -Spinner标题显示其零位元素

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center_horizontal|center_vertical" 
android:orientation="horizontal" > 
<Spinner 
    android:id="@+id/spinner" 
    android:layout_width="wrap_content" 
    android:layout_height="50dp" 
    android:layout_gravity="center_horizontal|center_vertical" /> 
</LinearLayout> 

和适配器类是 -

public class SpinnerAdapter extends BaseAdapter { 
Context mContext; 
List<SpinnerContent> list; 
public SpinnerAdapter(Context context, List<SpinnerContent> list) { 
    mContext = context; 
    this.list = list; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    SpinnerContent item = list.get(position); 
    if (convertView == null) { 
     LayoutInflater inflator = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflator.inflate(R.layout.spinner_item_row_image, 
       null); 
    } 
    TextView tvTitle = (TextView) convertView 
      .findViewById(R.id.tvSpinnerItem); 
    ImageView imgSpinnerContent = (ImageView) convertView 
      .findViewById(R.id.imgSpinnerItem); 
    if (item.getCollectionName().equalsIgnoreCase("Home")) { 
     imgSpinnerContent.setVisibility(View.VISIBLE); 
     imgSpinnerContent.setImageResource(R.drawable.icon_home); 
     tvTitle.setText("Home"); 
     tvTitle.setTextColor(mContext.getResources().getColor(
       R.color.white_text)); 
     convertView.setBackgroundColor(mContext.getResources().getColor(
       R.color.text_color_light_gray)); 
    } else if (item.getCollectionName().equalsIgnoreCase("One Level Up")) { 
     imgSpinnerContent.setVisibility(View.VISIBLE); 
     imgSpinnerContent.setImageResource(R.drawable.icon_spinner_up); 
     tvTitle.setText("One Level Up"); 
     tvTitle.setTextColor(mContext.getResources().getColor(
       R.color.white_text)); 
     convertView.setBackgroundColor(mContext.getResources().getColor(
       R.color.text_color_light_gray)); 
    } else if (item.getCollectionName().equalsIgnoreCase("One Level Down")) { 
     imgSpinnerContent.setVisibility(View.VISIBLE); 
     imgSpinnerContent.setImageResource(R.drawable.icon_spinner_down); 
     tvTitle.setText("One Level Down"); 
     tvTitle.setTextColor(mContext.getResources().getColor(
       R.color.white_text)); 
     convertView.setBackgroundColor(mContext.getResources().getColor(
       R.color.text_color_light_gray)); 
    } else { 
     if (position == 0) { 
      convertView.setBackgroundColor(mContext.getResources() 
        .getColor(android.R.color.transparent)); 
      imgSpinnerContent.setVisibility(View.GONE); 
      tvTitle.setText(item.getCollectionName()); 
      tvTitle.setTextColor(mContext.getResources().getColor(
        R.color.white_text)); 
     } else { 
      tvTitle.setText(item.getCollectionName()); 
      applyTheme(convertView, mContext); 
     } 
    } 
    return convertView; 
} 

我怎样才能实现这一目标。我希望列表中的第一个元素(将其传递给微调器)作为标题,但不想将其显示为微调器的第一个元素。 在此先感谢。

+0

我认为你必须使用Spinner提示属性来标题,而不是选项列表包含标题。 – 2014-09-26 06:55:28

回答

0

它不可能与微调。微调器总是显示第一个元素作为标题。如果你想添加标题,那么你最好在第0位显示你的标题。在验证部分中,如果用户选择第0位置设置验证消息给用户。

0

我认为你应该使用凯文克里斯解决方案。

如果你想实现然后尝试下面的trick.I从来没有使用过,但它应该工作。

spinner.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      View convertView = spinner.getSelectedView(); 
      View selectedView= adapter.getDropDownView(selectedPosition, convertView, spinner); 
      selectedView.setVisibility(View.GONE); 
     } 
    }); 
+0

不工作,它将删除微调器的标题。 – 2014-09-29 15:00:31