如何在单击按钮上从微调器中删除所选项目?
Posted
技术标签:
【中文标题】如何在单击按钮上从微调器中删除所选项目?【英文标题】:How can I delete selected item from spinner on click button? 【发布时间】:2017-03-14 20:36:58 【问题描述】:我正在开发一个 android 应用程序,我在 Xamarin、Visual stuio 中使用 c# 编写了这些代码:
const string KEY_FOR_TRY = "TRY";
ArrayAdapter<string> _spinnerAdapter;
List<string> items;
protected override void OnCreate (Bundle savedInstanceState)
base.OnCreate (savedInstanceState);
SetContentView (Resource.Layout.Main);
string user;
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (this);
ISharedPreferencesEditor editor = prefs.Edit();
var savedItems = prefs.GetStringSet (KEY_FOR_TRY, new List<string> ());
_spinnerAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, items);
spinner.Adapter = _spinnerAdapter;
items = new List<string> (savedItems) "1", "2", "3";
Button button4 = FindViewById<Button> (Resource.Id.button4);
Spinner spinner = FindViewById<Spinner> (Resource.Id.spinner1);
EditText input = FindViewById<EditText> (Resource.Id.input);
button4.Click += delegate
user = input.Text;
items.Add (user);
editor.PutStringSet (KEY_FOR_TRY, items);
editor.Apply ();
_spinnerAdapter.Insert (user, 0);
_spinnerAdapter.NotifyDataSetChanged ();
;
user = items.FirstOrDefault ();
_spinnerAdapter = new ArrayAdapter<string> (this, Android.Resource.Layout.SimpleSpinnerItem, items);
spinner.Adapter = _spinnerAdapter;
Button button5 = FindViewById<Button>(Resource.Id.button5);
button5.Click += delegate
items.Remove(spinner.SelectedItem.ToString());
editor.Remove(spinner.SelectedItem.ToString());
editor.Apply();
_spinnerAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, items);
spinner.Adapter = _spinnerAdapter;
;
user = items.FirstOrDefault();
spinner.Adapter = _spinnerAdapter;
我想要一个button5
,它从spinner
和SharedPreference prefs
中删除用户选择的项目。此外,当我运行这些代码时,var items
中的每个项目在微调器中显示两次,我该如何停止呢?并且 (button4
) 如果用户输入了两次相同的值,我想显示一个 toast message
表示您已经输入了这个值。
编辑:
button5
从微调器中删除该项目并且不会永久删除它,因此当我关闭并重新打开应用程序时,已删除的项目重新出现在微调器中。此外,var items
中的每个项目在spinner
中显示两次,但新添加的项目仅显示一次。
请帮我解决这些问题..
提前谢谢..
【问题讨论】:
【参考方案1】:在 OnCreate 方法之外声明您的项目列表。
List<string> items;
protected override void OnCreate (Bundle savedInstanceState)
base.OnCreate (savedInstanceState);
SetContentView (Resource.Layout.Main);
....
items = new List<string> (savedItems) "1", "2", "3";
_spinnerAdapter = new ArrayAdapter<string> (this, Android.Resource.Layout.SimpleSpinnerItem, items);
spinner.Adapter = _spinnerAdapter;
button5.Click += delegate
// To remove the selected item, first remove the selected item from the list, then call NotifyDataSetChanged
items.remove(spinner.SelectedItem.ToString ());
_spinnerAdapter.NotifyDataSetChanged ();
;
至于,项目在微调器中显示两次
var savedItems = prefs.GetStringSet (KEY_FOR_TRY, new List<string> ());
var items = new List<string> (savedItems) "1", "2", "3";
你这样做对吗?您的列表现在包含集合 savedItems + "1", "2", "3"
编辑:
对不起,我错了。使用微调器“NotifyDataSetChanged()”似乎不起作用。您需要重新设置适配器。
public class MainActivity : Activity
Spinner mySpinner;
Button button;
List<string> items;
ArrayAdapter<string> _spinnerAdapter;
protected override void OnCreate (Bundle savedInstanceState)
base.OnCreate (savedInstanceState);
SetContentView (Resource.Layout.Main);
button = FindViewById<Button> (Resource.Id.myButton);
mySpinner = FindViewById<Spinner> (Resource.Id.mySpinner);
items = new List<string> "1", "2", "3" ;
_spinnerAdapter = new ArrayAdapter<string> (this, Android.Resource.Layout.SimpleSpinnerItem, items);
mySpinner.Adapter = _spinnerAdapter;
button.Click += delegate
items.Remove (mySpinner.SelectedItem.ToString ());
mySpinner.Adapter = new ArrayAdapter<string> (this, Android.Resource.Layout.SimpleSpinnerItem, items);
;
这行得通。我已经测试过了。
编辑:
替换
editor.Remove(spinner.SelectedItem.ToString());
与:
editor.PutStringSet (KEY_FOR_TRY, items);
editor.Apply ();
您正在尝试从 SharedPreference 中删除微调器中的选定项目,而选定项目位于 SharedPreference 内部的列表中。
【讨论】:
我应该把这两行代码放在哪里来停止显示两次?至于从微调器中删除项目,我没有工作。 我认为集合 savedItems 已经包含 "1", "2", "3"。 var items = new Listitems = new List<string>
之后添加(saveditems)
,这将显示项目两次,但会保存用户输入。此外,当从微调器中删除项目然后重新打开应用程序时,该项目会重新出现。我希望永久删除该项目。
从共享偏好中删除项目以及在按钮点击内
我想过,但我不知道为什么它不起作用。我在想是否可以删除 _spinnerAdapter
中的重复项目,这样就不会显示两次项目。我该怎么做?以上是关于如何在单击按钮上从微调器中删除所选项目?的主要内容,如果未能解决你的问题,请参考以下文章
如何从该片段中的 onItemSelectedListener 中获取微调器单击的项目?
如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio