【问题标题】:spinner with setOnItemSelectedListener doesn't execute methods带有 setOnItemSelectedListener 的微调器不执行方法
【发布时间】:2018-06-23 05:20:59
【问题描述】:

我创建了一个微调器,它从某个数据库中获取它的值。微调器还有一个执行方法的 setOnItemSelectedListener。每当我单击微调器上的某个项目时,我都不会执行其中的内容。

    //Getting values from database
    myDBJ = new JobDatabaseHelper(this);
    ArrayList<String> jobname= myDBJ.getalljobname();

    Spinner spinnerJob = (Spinner) findViewById(R.id.spinnerJob);
    ArrayAdapter<String> adapterForJob = new ArrayAdapter<String>(InfoActivity.this, android.R.layout.simple_spinner_item, jobname);
    adapterForJob.notifyDataSetChanged();
    adapterForJob.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerJob.setAdapter(adapterForJob);
    spinnerJob.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(InfoActivity.this, "test" + i ,Toast.LENGTH_SHORT).show();
            //refreshrate();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

我什至在里面做了一个祝酒词,这样我就知道它是否有效。当我单击一个项目时,它不会显示 toast 消息。我想补充的另一个细节是,在我的 onCreate 和 onPostResume 覆盖方法中调用的名为“refreshspinners”的方法中。

【问题讨论】:

  • guide 表示“您为微调器 (...) 提供的选择必须通过 SpinnerAdapter 提供,例如 (...) CursorAdapter 如果选择是可从数据库查询中获得”。看来是你的情况。尝试使用 CursorAdapter 而不是 ArrayAdapter。
  • 什么是jobname,微调器中有多少项目?
  • 请在问题中添加jobname的创建
  • jobname 是一个数组列表。它从数据库中获取它的值。微调器也可以正常工作,只是 onItemSelectedListener 没有触发

标签: java android spinner


【解决方案1】:

你可以尝试使用静态字符串列表吗:

ArrayList<String> jobname = (ArrayList<String>) Arrays.asList(new String[] {"Engineer", "Manager", "Business developer"});

Spinner spinnerJob = (Spinner) findViewById(R.id.spinnerJob);
ArrayAdapter<String> adapterForJob = new ArrayAdapter<String>(InfoActivity.this, android.R.layout.simple_spinner_item, jobname);
adapterForJob.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerJob.setAdapter(adapterForJob);

spinnerJob.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        Toast.makeText(InfoActivity.this, "test" + i ,Toast.LENGTH_SHORT).show();
        //refreshrate();
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});

【讨论】:

  • 我不能使用静态字符串列表,因为数据库总是在变化。
  • 仅供测试
【解决方案2】:

你可以这样尝试:

Spinner sp = (Spinner)       findViewById(R.id.spnner);
        ArrayList<String> list = myDBJ.getAllJobName();
     sp.setAdapter(new       ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_spinner_dropdown_item,list));

        sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){

            @Override
            public void onItemSelected(AdapterView<?> p1, View p2, int p3, long p4)
            {
                Toast.makeText(getApplicationContext(),list.get(p3),Toast.LENGTH_SHORT).show();


            }

            @Override
            public void onNothingSelected(AdapterView<?> p1)
            {
                // TODO: Implement this method
            }
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多