【问题标题】:Use object array list as spinner adapter使用对象数组列表作为微调器适配器
【发布时间】:2016-01-14 20:20:54
【问题描述】:

我得到了这个对象的 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的联系人的名称,因为它显示了内存中的联系地址,并且在选择时,我需要返回联系人ID,以执行另一个操作。 我该怎么做?

【问题讨论】:

  • 我不清楚你的问题到底是什么,甚至你问了多少问题。你能解释一下代码在做什么是不正确的,或者你需要它做什么而不是做什么?

标签: android user-interface drop-down-menu spinner


【解决方案1】:

您好,您需要做的很简单,对于您的联系人类,覆盖其中的 toString() 方法并返回联系人的姓名。

看例子。它也可以在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;
        }
    }

}

输出

【讨论】:

  • 非常感谢您! +1 很棒的答案。
  • 不客气,我很高兴能帮上忙 :) ....... 检查 github 上的代码github.com/pankajnimgade/Tutorial/blob/master/app/src/main/java/…
  • 您好,上面的代码运行良好。如何从微调器中获取所选项目。
  • 只想添加这段代码 public void onItemSelected(AdapterView> adapterView, View view, int i, long l) { ((TextView) adapterView.getChildAt(0)).setTextColor(Color. parseColor("#001e62")); }
  • 哇!只需覆盖该方法 toString() 就可以节省一天的时间,谢谢!
【解决方案2】:

一种更强大的解决方案是获取需要显示的唯一值并制作一个更多列表。

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();

【讨论】:

    【解决方案3】:

    在科特林中 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多