使用 mySQL 数据从单个下拉列表微调器迁移到依赖微调器
Migrating from a single dropdown list spinner to a dependant spinner using mySQL data
我有一个微调器,其中填充了我的 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);
考虑到数据检索本身对两个微调器都适用,从单个微调器迁移到依赖微调器的最简单编码方法是什么,我只是想让它依赖于当前的独立格式,所以
spinner1 typesofjobsunique 仅显示
mySpinner 世界列表
来自 mySQL 的微调器选项对应于特定类型的职位。
这里的大多数问题都与依赖微调器有关,是数据在 strings.xml 中的位置,这对远程数据不是很有帮助。
我假设我需要将我的一个适配器分成两个单独的适配器,但我不清楚如何进行。
从Spinners work, if you want to implement dependence between them, you will need to use the current selection of one (spinner1) as the key for the list source of the other (mySpinner). You should implement an AdapterView.OnItemSelectedListener on spinner1 as recommended in the 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() 的实现应该以所需的方式查询您的数据库。也可以使用散列 table。
希望这有用。
编辑
根据您的评论,getWordListForItem() 的实现将如下所示:
List<String> getWordListForItem(String s) {
String json = queryMySQLDatabase(s);
List<String> results = parseJSONintoList(json);
return results;
}
此外,AdapterView.getItemAtPosition(int pos) 函数 returns 一个 Java 类型的对象传递给 ArrayAdapter(在本例中为 String)。因此 getWordListForItem() 需要一个字符串参数。
至于"Cannot resolve contructor ArrayAdaptor"错误,请检查拼写(应该是ArrayAdapter而不是ArrayAdaptor)。有关更多详细信息,请参阅 ArrayAdapter documentation...我还修复了上面的实现以正确排序列表。
我有一个微调器,其中填充了我的 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);
考虑到数据检索本身对两个微调器都适用,从单个微调器迁移到依赖微调器的最简单编码方法是什么,我只是想让它依赖于当前的独立格式,所以
spinner1 typesofjobsunique 仅显示 mySpinner 世界列表 来自 mySQL 的微调器选项对应于特定类型的职位。
这里的大多数问题都与依赖微调器有关,是数据在 strings.xml 中的位置,这对远程数据不是很有帮助。
我假设我需要将我的一个适配器分成两个单独的适配器,但我不清楚如何进行。
从Spinners work, if you want to implement dependence between them, you will need to use the current selection of one (spinner1) as the key for the list source of the other (mySpinner). You should implement an AdapterView.OnItemSelectedListener on spinner1 as recommended in the 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() 的实现应该以所需的方式查询您的数据库。也可以使用散列 table。
希望这有用。
编辑
根据您的评论,getWordListForItem() 的实现将如下所示:
List<String> getWordListForItem(String s) {
String json = queryMySQLDatabase(s);
List<String> results = parseJSONintoList(json);
return results;
}
此外,AdapterView.getItemAtPosition(int pos) 函数 returns 一个 Java 类型的对象传递给 ArrayAdapter(在本例中为 String)。因此 getWordListForItem() 需要一个字符串参数。
至于"Cannot resolve contructor ArrayAdaptor"错误,请检查拼写(应该是ArrayAdapter而不是ArrayAdaptor)。有关更多详细信息,请参阅 ArrayAdapter documentation...我还修复了上面的实现以正确排序列表。