使用mySQL数据从单个下拉列表微调器迁移到依赖微调器

时间:2015-10-31 14:58:17

标签: java mysql android-spinner

我有一个用我的SQL数据填充的微调器。这很好用。我现在想把它变成一个依赖的微调器,其中我已经拥有的微调器成为第二个或依赖的微调器。我在MainActivity.java中添加了另一个微调器。它成功地检索了所需的mySQL数据

  @Override
    protected void onPostExecute(Void args) {
        // Locate spinner1 in activity_main.xml
        Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);

        // Spinner adapter
  List<String> typesofjobsunique = new ArrayList<>(new LinkedHashSet<>(typesofjobs)); 
        spinner1.setAdapter(new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_spinner_dropdown_item, typesofjobsunique));

        Collections.sort(typesofjobsunique);

        // Locate my spinner in activity_main.xml
        Spinner mySpinner = (Spinner) findViewById(R.id.my_spinner);

        // Spinner adapter
        mySpinner
                .setAdapter(new ArrayAdapter<String>(MainActivity.this,
                        android.R.layout.simple_spinner_dropdown_item,
                        worldlist));

        Collections.sort(worldlist);

从单个spinner迁移到依赖微调器的最简单的编码方法是什么,因为数据检索本身适用于两个微调器,我只想让它依赖于当前的独立格式,所以

spinner1 typesofjobsunique只显示 mySpinner世界列表 来自mySQL的微调器选择对应于特定的typeofjobunique。

这里有关于依赖微调器的大多数问题都是在strings.xml中的数据,这对远程数据没有多大帮助。

我假设我需要将我的一个适配器分成两个独立的适配器,但我不清楚如何处理。

1 个答案:

答案 0 :(得分:1)

Spinners的工作方式来看,如果要实现它们之间的依赖关系,则需要使用当前选择的一个(spinner1)作为另一个(mySpinner)的列表源的键。您应该按照AdapterView.OnItemSelectedListener中的建议在spinner1上实现Spinner guide,并在mySpinner中设置列表。请参阅以下代码:

// Locate spinner1 in activity_main.xml
Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);

// Locate mySpinner in activity_main.xml
Spinner mySpinner = (Spinner) findViewById(R.id.my_spinner);

// Spinner adapter
List<String> typesofjobsunique = new ArrayList<>(new LinkedHashSet<>(typesofjobs)); 
spinner1.setAdapter(new ArrayAdapter<String>(MainActivity.this,
        android.R.layout.simple_spinner_dropdown_item, typesofjobsunique));

spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        // **EDIT**
        List<String> myWorldList = getWorldListForItem(parent.getItemAtPosition(pos));
        Collections.sort(myWorldList);
        mySpinner
                .setAdapter(new ArrayAdapter<String>(MainActivity.this,
                        android.R.layout.simple_spinner_dropdown_item,
                        myWorldList));

    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }
});

Collections.sort(typesofjobsunique);

getWorldListForItem()的实现应该以所需的方式查询您的数据库。也可以使用哈希表。

希望这很有用。

修改

根据您的评论,getWordListForItem()的实现看起来像这样:

List<String> getWordListForItem(String s) {
    String json = queryMySQLDatabase(s);
    List<String> results = parseJSONintoList(json);
    return results;
}

此外,AdapterView.getItemAtPosition(int pos)函数返回传递给ArrayAdapter的类型的Java对象(在本例中为String)。因此getWordListForItem()接受一个String参数。

至于“无法解析contructor ArrayAdaptor”错误,请检查拼写(它应该是ArrayAdapter而不是ArrayAdaptor)。有关详细信息,请参阅ArrayAdapter documentation ...我还修复了上面的实施,以便对列表进行正确排序。