【问题标题】:Android / Changing the text in specific spinner itemAndroid / 更改特定微调器项目中的文本
【发布时间】:2020-01-02 16:03:06
【问题描述】:

我正在为珠宝店设计一款移动应用。在 Android 中,对于珠宝产品描述页面,我有一个带有一些戒指尺寸的 Spinner,它们的文本 525 使用自定义数组列表适配器设置。

我有一个 18 carat22 carat 的单选组,它们与微调器一起使用,如果选择了不同的克拉单选按钮,那么微调器文本应仅针对几个环尺寸随之更改,例如例如17 - Ships in 24 hours,如果戒指尺寸可以发货,18,如果戒指尺寸是根据客户的订单重新制作的。

为了实现这一点,如果选择了不同大小的单选按钮,我会创建一个新的数组列表,再次为微调器添加所有新文本,然后再次使用数组适配器。

ArrayAdapter adapter = new ArrayAdapter(Description.this, android.R.layout.simple_spinner_item, sizes);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(adapter);

这样做时,微调器始终自动默认为第一项 5,即使之前选择的微调器项是 17 大小的不同克拉单选按钮。

另外,同一活动中其他文本视图对应的其他详细信息,例如价格、折扣、制作费用、黄金重量、交货日期、产品是否准备好发货等,自动默认为戒指尺寸@ 987654331@.

那么,如果选择了不同的克拉单选按钮,是否可以通过编程方式更改特定 Spinner 项目的文本?是否可以在不创建新数组列表、将所有新文本添加到其中并再次使用数组适配器的情况下实现这一目标?如果是的话怎么办?

【问题讨论】:

  • 你检查过这里吗:stackoverflow.com/questions/3283337/…
  • 我猜你正在将适配器应用于微调器上的单选按钮更改。如果 18 克拉和 22 克拉的戒指尺寸相同,则无需重新设置适配器。
  • @peco:如果使用数组适配器,那么使用setAdapter 函数调用,微调器项会自动默认为微调器列表中的第一个元素。有什么办法可以避免这种情况并利用setSelection 函数调用再次设置先前选择的微调器项?
  • 所以基本上你的一个数组只包含像 17 和其他 17 这样的数字 - 我在 24 小时内发货对吗?
  • 如果根本不想使用 setAdapter 和两个不同的数组。您仍然可以实现这一点,但您需要在微调器的 onItemSelectedListener 上添加条件。这不是一个好方法。

标签: android arraylist spinner android-arrayadapter android-adapter


【解决方案1】:

试试下面的代码,

选择索引位置 2 处的 Spinner 元素 (它将从 Spinner 中选择第三个元素/项目)

s1.setSelection(2);

【讨论】:

  • 是的,我同意这确实是可能的,这是我尝试做的,这将处理s1.onItemSelectedListener 中的所有代码。但是有没有办法在不使用适配器的情况下更改特定微调器项的文本,并且没有微调器项默认自动回滚到第一个元素并以编程方式再次将其设置回之前选择的微调器项?
【解决方案2】:

如果 sizes 是一个 ArrayList,要更改微调器中的特定项目,请尝试使用

sizes.set(index,newItem)

如果要将第 3 项改为 10,

sizes.set(2,10) //I am assuming the sizes arraylist is integer arraylist. if not change to required data type

然后执行

adapter.notifyDataSetChanged() // This will refresh you spinner.

而不是重新设置微调器上的适配器。然后如果你愿意,执行

s1.setSelection(2)

s1.setAdapter(adapter); 应该只执行一次(在微调器初始化时)。

public void refreshSpinner(int index,int newValue){ 
    sizes.set(index,newValue);
    adapter.notifyDataSetChanged();

    //Only if you want to select the new value
    s1.setSelection(index);
}

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2015-04-15
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多