我有一个用我的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中的数据,这对远程数据没有多大帮助。
我假设我需要将我的一个适配器分成两个独立的适配器,但我不清楚如何处理。
答案 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 ...我还修复了上面的实施,以便对列表进行正确排序。