我使用自定义适配器来填充我的Spinner。我已经覆盖了getDropDownView,我从中返回下拉列表的每一行的视图。除了渲染的下拉列表没有获得Spinner小部件的宽度之外,一切正常。而是它像这样:
因此下拉列表缺少突出显示的宽度。我不知道为什么会这样。我希望它能获得微调器的整个宽度。
我的自定义适配器:
class CategorySpinnerAdapter extends ArrayAdapter{
private Activity context;
ArrayList<Category> categoryList;
public CategorySpinnerAdapter(Activity context,int resourceID,ArrayList<Category> categoryList)
{
super(context,resourceID,categoryList);
this.context=context;
this.categoryList=categoryList;
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView==null)
{
LayoutInflater inflater=context.getLayoutInflater();
convertView=inflater.inflate(R.layout.category_spinner_row, parent,false);
}
Category currentCategory=categoryList.get(position);
TextView categoryText=(TextView) convertView.findViewById(R.id.spinnerText);
categoryText.setText(currentCategory.getCategoryName());
return convertView;
}
}
代码,我在哪里设置此适配器:
Spinner categorySpinner=(Spinner) getActivity().findViewById(R.id.categorySpinner);
ArrayList<Category> categoryList=populateCategoryList();
CategorySpinnerAdapter categorySpinnerAdapter=new CategorySpinnerAdapter(getActivity(), android.R.layout.simple_spinner_item,categoryList);
categorySpinner.setAdapter(categorySpinnerAdapter);
categorySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView,
int position, long id) {
// TODO Auto-generated method stub
ArrayList<Reward> modifiedList=new ArrayList<Reward>();
//test case: category OK
int categoryID=position+1;
for(int i=0;i<rewardList.size();i++)
{
if(rewardList.get(i).getCategoryID()==categoryID)
{
modifiedList.add(rewardList.get(i));
}
}
adapter.changeDataSet(modifiedList);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
//get default ELECTRONICS category 1 data to populate the list
ArrayList<Reward> defaultCategorizedList=new ArrayList<Reward>();
//test case: category OK
for(int i=0;i<rewardList.size();i++)
{
if(rewardList.get(i).getCategoryID()==1)
{
defaultCategorizedList.add(rewardList.get(i));
}
}
}
});
主xml中的Spinner项目声明:
<Spinner
android:id="@+id/categorySpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/customerRewardPointsTextView"
android:background="@drawable/btn_dropdown"
android:spinnerMode="dropdown" />
下拉项目的布局,category_spinner_row.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/category_spinner_background" >
<TextView
android:id="@+id/spinnerText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:ellipsize="marquee"
android:gravity="center"
android:singleLine="true" />
</RelativeLayout>
如何解决此问题?
答案 0 :(得分:0)
试试这个:
convertView=inflater.inflate(android.R.layout.simple_list_item_1, parent,false);
答案 1 :(得分:0)
问题的出现是因为“android:background =”@ drawable / btn_dropdown“”这部分代码。当你删除它时你将看到微调器正在按预期工作,这意味着btn_dropdown drawable与你的微调器的宽度相冲突,最终它的弹出窗口就是你看到这种奇怪行为的原因。我建议你调整你的btn_dropdown drawable,这样它就不会与spinner的默认行为发生冲突。看看这些帖子:
我没有尝试过这些,但我认为你会找到你需要的东西。