2013-11-26 4 views
0

Я использовал пользовательский адаптер для заполнения моего Spinner. У меня есть overriden getDropDownView, из которого я возвращаю представление каждой строки выпадающего списка. Все работает отлично, за исключением выпадающего списка, который не получает ширину виджета Spinner. Скорее это выглядит следующим образом: enter image description hereWeird 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)); 
         } 
        } 

      } 
     }); 

декларацию Spinner Пункт внутри основного XML:

<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

попробовать это один:

convertView=inflater.inflate(android.R.layout.simple_list_item_1, parent,false); 
+0

оленья кожа работа таким образом –

+0

Это принимает TextView по умолчанию properties..use андроида предопределенный thing..It будет работать ... – bGorle

+0

Для меня его работы тонкой Yaar ... – bGorle

0

Проблема начинается из "Android: фон =" @ вытяжке/btn_dropdown "" этой части кода. Когда вы удалите это, вы увидите, что счетчик работает так, как предполагается, это означает, что btn_dropdown drawable противоречит ширине вашего счетчика и, в конечном счете, это всплывающее окно, поэтому вы видите это странное поведение. Я бы предложил вам настроить ваш btn_dropdown drawable так, чтобы он не противоречил поведению по умолчанию. Посмотрите на эти должности:

Я не пробовал, но те, я думаю, что вы найдете то, что вам нужно.

+0

Я старался не использовать «android: background = "@ drawable/btn_dropdown", но то, что он делает, это просто уменьшает высоту wigdet. По основной проблеме остается проблема –