【问题标题】:Spinner dropUP instead dropDOWN androidSpinner dropUP 而不是 dropDOWN android
【发布时间】:2020-08-06 14:18:11
【问题描述】:

我有一个从 ArrayAdapter 扩展而来的适配器,以便用一组对象(城市)填充一个 Spinner。 所有对象和适配器都可以正常工作,至少看起来是这样。 问题是当我显示所有城市集合时,它显示为 UP 而不是 DOWN。

有人知道会发生什么吗?

这是我的适配器

public class AdapterSpinnerListCities extends ArrayAdapter<City> {

// My context
private Context context;
// Values for the spinner (City)
private List<City> listLocationsSpinner = UpdatedStatusApplication.getListLocations();
Typeface tf = null;

public AdapterSpinnerListCities (Context context, int textViewResourceId, List<City> listLocationsAPP) {
    super(context, textViewResourceId, listLocationsAPP);
    this.context = context;
    this.listLocationsSpinner = listLocationsAPP;
    tf = CustomFontsLoader.getTypeface(this.context,CustomFontsLoader.FONT_CHALKBOARD_1);   
}

public int getCount(){
   return listLocationsSpinner.size();
}

public City getItem(int position){
   return listLocationsSpinner.get(position);
}

public long getItemId(int position){
   return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {         
    
    LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View item = convertView;  
    
    item = inflater.inflate(R.layout.list_item_city, null);
    TextView tvCity = (TextView)item.findViewById(R.id.tv_item_city);
    tvCity.setText(listLocationsSpinner.get(position).getCityName().toUpperCase()); 
    tvCity.setTypeface(tf);   
        
    return(item);
}



// And here is when the "chooser" is popped up
// Normally is the same view, but you can customize it if you want
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {       
    
    LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View item = convertView;  
    
    if (listLocationsSpinner.get(position).getCitySubcity() == TagManager.TAG_IS_NOT_SUBCITY){
        item = inflater.inflate(R.layout.list_item_city, null);
        TextView tvCity = (TextView)item.findViewById(R.id.tv_item_city);
        tvCity.setText(listLocationsSpinner.get(position).getCityName().toUpperCase());             
        tvCity.setTypeface(tf);             
    }
    else{
        item = inflater.inflate(R.layout.list_item_subcity, null);
        TextView tvSubCity = (TextView)item.findViewById(R.id.tv_item_subcity);
        tvSubCity.setText(listLocationsSpinner.get(position).getCityName());    
        tvSubCity.setTypeface(tf);              
    }
    return(item);        
  }

我的 Spinner 在布局中(它是一个相对布局)

<LinearLayout
    android:id="@+id/lyt_locationSpinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/LinearLayoutLogo"
    android:layout_below="@+id/lyt_drink_food_deals"
    android:orientation="horizontal"         
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="5dp"         
    >                
    <Spinner android:id="@+id/cmb_location"
        style="@style/style_btn_request"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"                     
        android:spinnerMode="dropdown"            
        />                   
</LinearLayout>

我的活动

   private Spinner mySpinner;
   private AdapterSpinnerListCities adapter;
   List<City> listDeployedLocations = new ArrayList<City>();

    .....
    .....

    adapter = new AdapterSpinnerListCities (this,  android.R.layout.simple_spinner_dropdown_item, listDeployedLocations);        
    mySpinner = (Spinner) findViewById(R.id.cmb_location);
    mySpinner.setAdapter(adapter); // Set the custom adapter to the spinner
    
    mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected (AdapterView<?> parentView, View selectedItemView, int position, long id) {
            citySelected = listDeployedLocations.get(position);
            System.out.println("Spinner value...."+ citySelected.getCityID()+"-"+citySelected.getCityName());
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            // code here
        }


    });   

【问题讨论】:

    标签: android drop-down-menu spinner android-arrayadapter


    【解决方案1】:

    如果使微调器充气的项目靠近屏幕底部,则会发生这种情况。由于旋转器向下充气时将没有足够的空间(或几乎没有足够的空间),因此它会向上充气。尝试将微调器放在布局中更高(垂直)的位置。

    【讨论】:

    • 关键问题是因为有一个滚动条无论如何你如何将它配置为下拉菜单(仅限)。即它不应该在任何情况下
    【解决方案2】:

    尝试将 marginEnd 添加到微调器。微调器没有足够的空间向下打开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多