Xamarin.安卓系统:动态自动完成文本视图



我创建了一个适配器:

// public
ArrayAdapter<string> adapter { get; set; }
List<string> autocomplete = new List<string>();
// OnCreate()
AutoCompleteTextView autoComplete = FindViewById<AutoCompleteTextView>(Resource.Id.autoCompleteTextView1);
adapter = new ArrayAdapter<string>(this, Resource.Layout.list_item, autocomplete);
autoComplete.Adapter = adapter;
autoComplete.Threshold = 5;

在这里我想更改为适配器或添加建议

// AfterTextChanged()
adapter.Clear(); // Clear Adapter (previous suggestions)
// Get Autocomplete from Locationiq und Deserialize it
List<AutoComplete> auto = await GetAutoComplete(FindViewById<AutoCompleteTextView>(Resource.Id.autoCompleteTextView1).Text, Encoding.UTF8.GetString(Convert.FromBase64String(locationiq)));
List<string> temp = new List<string>();
foreach (AutoComplete city in auto)
{
temp.Add(city.display_place); // Show only the display place (not coordinates etc)
}
autocomplete = temp; // Change the List
adapter.NotifyDataSetChanged(); // Notify that data changed

如果我用静态数据在适配器之前创建列表,它可以很好地工作,但我无法使它与动态数据一起工作

源代码

有人能帮我吗?我查了很多东西,但我能找到一个有效的解决方案

根据您的描述,您想为AutoCompleteTextView添加动态列表,我创建了一个简单的示例,您可以使用它:

public class MainActivity : AppCompatActivity
{
List<string> countries;
ArrayAdapter adapter;
AutoCompleteTextView textView;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
countries = new List<string>() {
"Afghanistan","Albania","Algeria","American Samoa","Andorra",
"Vanuatu","Vatican City","Venezuela","Vietnam","Wallis and Futuna","Western Sahara",
"Yemen","Yugoslavia","Zambia","Zimbabwe"
};
textView = FindViewById<AutoCompleteTextView>(Resource.Id.autocomplete_country);
adapter = new ArrayAdapter(this, Resource.Layout.list_item, countries) ;
textView.Adapter = adapter;
Button btnadd = FindViewById<Button>(Resource.Id.button1);
btnadd.Click += Btnadd_Click;
textView.Adapter = adapter;
}
private void Btnadd_Click(object sender, EventArgs e)
{
countries.Clear();
countries = new List<string>()
{
"chinese","test","english"
};
adapter.AddAll(countries);
adapter.NotifyDataSetChanged();


}

最新更新