自定义微调器下拉列表第一次从底部显示数据
Custom spinner drop-down showing data from bottom first time
我已经创建了一个微调器并使用自定义适配器设置了数据。在那种情况下,如果我点击微调器,我会得到从底部开始的下拉菜单。我需要从顶部开始的下拉菜单。
我遇到了这个问题,如图所示
如图所示,当我第一次点击微调器时从底部获取数据。
我需要从顶部获取数据。
我的代码:
微调器和适配器设置
listCtcLakhs = new ArrayList<String>();
listCtcLakhs.add("25");
listCtcLakhs.add("30");
listCtcLakhs.add("35");
listCtcLakhs.add("40");
listCtcLakhs.add("45");
listCtcLakhs.add("50");
listCtcLakhs.add("60");
listCtcLakhs.add("70");
listCtcLakhs.add("80");
listCtcLakhs.add("90");
listCtcLakhs.add("100");
listCtcLakhs.add("110");
listCtcLakhs.add("120");
listCtcLakhs.add("150");
listCtcLakhs.add("Lacs");
spForCtcLakhs
.setAdapter(new SpinnerAdapter(getActivity(), listCtcLakhs));
spForCtcLakhs.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
view.findViewById(R.id.iconDropDown)
.setVisibility(View.VISIBLE);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
spForCtcLakhs.setSelection(listCtcLakhs.size() - 1);
适配器代码
public class SpinnerAdapter extends BaseAdapter {
Context mContext;
ArrayList<String> dropDownList;
public SpinnerAdapter(Context context, ArrayList<String> studentList) {
this.mContext = context;
this.dropDownList = studentList;
}
@Override
public int getCount() {
if(dropDownList.size()>1){
return dropDownList.size()-1;
}
return dropDownList.size();
}
@Override
public Object getItem(int arg0) {
return dropDownList.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
private class ViewHolder {
TextView txtMenu;
ImageView ivDropDown;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder = null;
if (view == null) {
LayoutInflater layoutInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
holder = new ViewHolder();
view = layoutInflater.inflate(R.layout.highest_qulifi_layout,
parent, false);
holder.txtMenu = (TextView) view
.findViewById(R.id.highest_quilification_textview);
holder.ivDropDown = (ImageView) view
.findViewById(R.id.iconDropDown);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
try {
String name = dropDownList.get(position);
// set hint
if (position == getCount()) {
holder.ivDropDown.setVisibility(View.VISIBLE);
holder.txtMenu.setText(name);
}
// Set data
else {
holder.txtMenu.setText(name);
}
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
return view;
}
}
我尝试了很多方法,但我无法在列表顶部设置提示(在列表中提示在底部,我用 setSelection()
设置)。因此它没有排在首位。
如果有人有任何其他方法可以做到这一点,请帮助我。
默认情况下,下拉菜单开始显示所选项目的下一项。我相信您需要创建一个 CustomSpinner class 来覆盖 Spinner class 中确定下拉列表显示内容的方法。另一个答案 here 包含一个非常清楚的可能实现示例。
我已经创建了一个微调器并使用自定义适配器设置了数据。在那种情况下,如果我点击微调器,我会得到从底部开始的下拉菜单。我需要从顶部开始的下拉菜单。
我遇到了这个问题,如图所示
如图所示,当我第一次点击微调器时从底部获取数据。
我需要从顶部获取数据。
我的代码:
微调器和适配器设置
listCtcLakhs = new ArrayList<String>();
listCtcLakhs.add("25");
listCtcLakhs.add("30");
listCtcLakhs.add("35");
listCtcLakhs.add("40");
listCtcLakhs.add("45");
listCtcLakhs.add("50");
listCtcLakhs.add("60");
listCtcLakhs.add("70");
listCtcLakhs.add("80");
listCtcLakhs.add("90");
listCtcLakhs.add("100");
listCtcLakhs.add("110");
listCtcLakhs.add("120");
listCtcLakhs.add("150");
listCtcLakhs.add("Lacs");
spForCtcLakhs
.setAdapter(new SpinnerAdapter(getActivity(), listCtcLakhs));
spForCtcLakhs.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
view.findViewById(R.id.iconDropDown)
.setVisibility(View.VISIBLE);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
spForCtcLakhs.setSelection(listCtcLakhs.size() - 1);
适配器代码
public class SpinnerAdapter extends BaseAdapter {
Context mContext;
ArrayList<String> dropDownList;
public SpinnerAdapter(Context context, ArrayList<String> studentList) {
this.mContext = context;
this.dropDownList = studentList;
}
@Override
public int getCount() {
if(dropDownList.size()>1){
return dropDownList.size()-1;
}
return dropDownList.size();
}
@Override
public Object getItem(int arg0) {
return dropDownList.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
private class ViewHolder {
TextView txtMenu;
ImageView ivDropDown;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder = null;
if (view == null) {
LayoutInflater layoutInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
holder = new ViewHolder();
view = layoutInflater.inflate(R.layout.highest_qulifi_layout,
parent, false);
holder.txtMenu = (TextView) view
.findViewById(R.id.highest_quilification_textview);
holder.ivDropDown = (ImageView) view
.findViewById(R.id.iconDropDown);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
try {
String name = dropDownList.get(position);
// set hint
if (position == getCount()) {
holder.ivDropDown.setVisibility(View.VISIBLE);
holder.txtMenu.setText(name);
}
// Set data
else {
holder.txtMenu.setText(name);
}
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
return view;
}
}
我尝试了很多方法,但我无法在列表顶部设置提示(在列表中提示在底部,我用 setSelection()
设置)。因此它没有排在首位。
如果有人有任何其他方法可以做到这一点,请帮助我。
默认情况下,下拉菜单开始显示所选项目的下一项。我相信您需要创建一个 CustomSpinner class 来覆盖 Spinner class 中确定下拉列表显示内容的方法。另一个答案 here 包含一个非常清楚的可能实现示例。