gpt4 book ai didi

android - 如何在 Android Spinner 中隐藏一项

转载 作者:IT老高 更新时间:2023-10-28 13:05:17 29 4
gpt4 key购买 nike

我正在寻找一种在 Android 微调器小部件中隐藏一个项目的方法。这将允许您模拟没有选择任何项目的微调器,并确保始终为每个选择的项目调用 onItemSelected() 回调(如果隐藏的项目是“当前”项目)。通常,微调器中始终有一项不会生成回调,即当前项。

stackoverflow 上有一些关于如何禁用(灰显)项目的代码,而不是如何完全隐藏项目,就好像它们不存在一样。

经过大量实验后,我想出了一个适用于各种新旧 Android 平台的有点骇人听闻的解决方案。它有一些难以察觉的轻微外观缺陷。除了“不要用微调器这样做”之外,我仍然希望听到更官方的解决方案。

这总是隐藏微调器中的第一个项目,但可以很容易地扩展为隐藏任意项目或多个项目。在微调器项目列表的开头添加一个包含空字符串的虚拟项目。您可能希望在微调器对话框打开之前将当前微调器选择设置为项目 0,这将模拟未选择的微调器。

带有 ArrayAdapter 方法覆盖的 Spinner 设置示例:

List<String> list = new ArrayList<String>();
list.add(""); // Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");

// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
View v = null;

// If this is the initial dummy entry, make it hidden
if (position == 0) {
TextView tv = new TextView(getContext());
tv.setHeight(0);
tv.setVisibility(View.GONE);
v = tv;
}
else {
// Pass convertView as null to prevent reuse of special case views
v = super.getDropDownView(position, null, parent);
}

// Hide scroll bar because it appears sometimes unnecessarily, this does not prevent scrolling
parent.setVerticalScrollBarEnabled(false);
return v;
}
};

dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);

最佳答案

要隐藏任意项或多个项,我认为您可以实现自己的适配器并设置要隐藏的索引(或索引数组列表)。

public class CustomAdapter extends ArrayAdapter<String> {

private int hidingItemIndex;

public CustomAdapter(Context context, int textViewResourceId, String[] objects, int hidingItemIndex) {
super(context, textViewResourceId, objects);
this.hidingItemIndex = hidingItemIndex;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View v = null;
if (position == hidingItemIndex) {
TextView tv = new TextView(getContext());
tv.setVisibility(View.GONE);
v = tv;
} else {
v = super.getDropDownView(position, null, parent);
}
return v;
}
}

并在创建项目列表时使用您的自定义适配器。

List<String> list = new ArrayList<String>();
list.add(""); // Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");

int hidingItemIndex = 0;

CustomAdapter dataAdapter = new CustomAdapter(this, android.R.layout.simple_spinner_item, list, hidingItemIndex);

dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);

(我没有测试过代码)希望有所帮助。

关于android - 如何在 Android Spinner 中隐藏一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9863378/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com