使用对象数组列表作为微调器适配器
Use object array list as spinner adapter
我得到了这个对象的 ArrayList,我需要像这样将它设置为我的微调器的适配器:
ArrayList<Contact> contactlist= new ArrayList<Contact>();
contactlist.add("Gabe");
contactlist.add("Mark");
contactlist.add("Bill");
contactlist.add("Steve");
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, contactlist);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
contactsSpinner.setAdapter(adapter);
这是我的联系人对象的示例,它只有两个变量,名称和 ID
Contact contact = new Contact();
contact.setName("Gabe")
contact.setID("14575")
我需要让微调器显示 ArrayList 中的联系人姓名,因为它显示的是内存中的联系人地址,选择后,我需要 return 联系人 ID,以执行其他操作.
我该怎么做?
您好,您需要做的很简单,对于您的 class 联系人,覆盖其中的 toString() 方法和 return 联系人姓名。
看例子。它也可以在 github
中找到
public class SpinnerTestOneActivity extends AppCompatActivity {
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner_test_one);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_custom_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
initializeUI();
}
private void initializeUI() {
spinner = (Spinner) findViewById(R.id.SpinnerTestOneActivity_spinner);
ArrayList<Contact> contacts = new ArrayList<>();
for (int i = 0; i < 10; i++) {
contacts.add(new Contact("Name_" + i, "Id_" + i));
}
ArrayAdapter<Contact> adapter =
new ArrayAdapter<Contact>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, contacts);
adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
private class Contact {
private String contact_name;
private String contact_id;
public Contact() {
}
public Contact(String contact_name, String contact_id) {
this.contact_name = contact_name;
this.contact_id = contact_id;
}
public String getContact_name() {
return contact_name;
}
public void setContact_name(String contact_name) {
this.contact_name = contact_name;
}
public String getContact_id() {
return contact_id;
}
public void setContact_id(String contact_id) {
this.contact_id = contact_id;
}
/**
* Pay attention here, you have to override the toString method as the
* ArrayAdapter will reads the toString of the given object for the name
*
* @return contact_name
*/
@Override
public String toString() {
return contact_name;
}
}
}
output
一个更稳健的解决方案是只取需要显示的值,再制作一个列表。
private ArrayAdapter adapter;
private List<CategoryHelper> categoryList = STORE.getCategoryList();
private List<String> names=new ArrayList<>();
adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_spinner_item, names);
adapter.setDropDownViewResource(android.R.layout
.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
for(CategoryHelper helper:categoryList){
names.add(helper.getName());
}
adapter.notifyDataSetChanged();
在科特林
val adapter02 : ArrayAdapter = ArrayAdapter(
应用上下文,
android.R.layout.simple_spinner_dropdown_item,
数组
)
adapter02.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter02
我得到了这个对象的 ArrayList,我需要像这样将它设置为我的微调器的适配器:
ArrayList<Contact> contactlist= new ArrayList<Contact>();
contactlist.add("Gabe");
contactlist.add("Mark");
contactlist.add("Bill");
contactlist.add("Steve");
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, contactlist);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
contactsSpinner.setAdapter(adapter);
这是我的联系人对象的示例,它只有两个变量,名称和 ID
Contact contact = new Contact();
contact.setName("Gabe")
contact.setID("14575")
我需要让微调器显示 ArrayList 中的联系人姓名,因为它显示的是内存中的联系人地址,选择后,我需要 return 联系人 ID,以执行其他操作. 我该怎么做?
您好,您需要做的很简单,对于您的 class 联系人,覆盖其中的 toString() 方法和 return 联系人姓名。
看例子。它也可以在 github
中找到public class SpinnerTestOneActivity extends AppCompatActivity {
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner_test_one);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_custom_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
initializeUI();
}
private void initializeUI() {
spinner = (Spinner) findViewById(R.id.SpinnerTestOneActivity_spinner);
ArrayList<Contact> contacts = new ArrayList<>();
for (int i = 0; i < 10; i++) {
contacts.add(new Contact("Name_" + i, "Id_" + i));
}
ArrayAdapter<Contact> adapter =
new ArrayAdapter<Contact>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, contacts);
adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
private class Contact {
private String contact_name;
private String contact_id;
public Contact() {
}
public Contact(String contact_name, String contact_id) {
this.contact_name = contact_name;
this.contact_id = contact_id;
}
public String getContact_name() {
return contact_name;
}
public void setContact_name(String contact_name) {
this.contact_name = contact_name;
}
public String getContact_id() {
return contact_id;
}
public void setContact_id(String contact_id) {
this.contact_id = contact_id;
}
/**
* Pay attention here, you have to override the toString method as the
* ArrayAdapter will reads the toString of the given object for the name
*
* @return contact_name
*/
@Override
public String toString() {
return contact_name;
}
}
}
output
一个更稳健的解决方案是只取需要显示的值,再制作一个列表。
private ArrayAdapter adapter;
private List<CategoryHelper> categoryList = STORE.getCategoryList();
private List<String> names=new ArrayList<>();
adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_spinner_item, names);
adapter.setDropDownViewResource(android.R.layout
.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
for(CategoryHelper helper:categoryList){
names.add(helper.getName());
}
adapter.notifyDataSetChanged();
在科特林 val adapter02 : ArrayAdapter = ArrayAdapter( 应用上下文, android.R.layout.simple_spinner_dropdown_item, 数组 ) adapter02.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter02