[英]What data structure to be used to achieve the required result?
我從服務器獲取JSON響應,如下所示
{
"ClassListTaughtByStaff": {
"ClassTeacherTable": [
{
"StandardId": "96e671e2-c1fe-4879-b3bc-88c721292edf",
"StandardName": "IV",
"DivisionId": "ac2b6419-a01b-46e1-a5e3-23e84cb04af9",
"DivisionName": "A"
}
],
"SubjectTeacherTable": [
{
"StandardId": "90da4426-1ba4-4f79-86a5-abb54cf99efb",
"StandardName": "U.K.G",
"DivisionId": "ac2b6419-a01b-46e1-a5e3-23e84cb04af9",
"DivisionName": "A"
},
{
"StandardId": "b2e5f4a8-2abb-4362-a968-e96d9bce3dce",
"StandardName": "I",
"DivisionId": "895f06a5-1bf6-488b-87e4-2f8497e27680",
"DivisionName": "B"
},
{
"StandardId": "08fafc51-3ebe-4e9c-8351-af06dc15ca16",
"StandardName": "II",
"DivisionId": "ac2b6419-a01b-46e1-a5e3-23e84cb04af9",
"DivisionName": "A"
},
{
"StandardId": "08fafc51-3ebe-4e9c-8351-af06dc15ca16",
"StandardName": "II",
"DivisionId": "895f06a5-1bf6-488b-87e4-2f8497e27680",
"DivisionName": "B"
},
{
"StandardId": "ed61b45d-a779-4d65-8330-745853396980",
"StandardName": "III",
"DivisionId": "ac2b6419-a01b-46e1-a5e3-23e84cb04af9",
"DivisionName": "A"
},
{
"StandardId": "ed61b45d-a779-4d65-8330-745853396980",
"StandardName": "III",
"DivisionId": "895f06a5-1bf6-488b-87e4-2f8497e27680",
"DivisionName": "B"
},
{
"StandardId": "96e671e2-c1fe-4879-b3bc-88c721292edf",
"StandardName": "IV",
"DivisionId": "895f06a5-1bf6-488b-87e4-2f8497e27680",
"DivisionName": "B"
}
]
}
}
我正在使用ArrayList在2個不同的微調器中加載標准名稱和部門名稱。 如果您看到這些圖像,則所有標准和分割都將加載到各自的微調器中。 現在,如果我從標准微調器中選擇IV
,則分區微調器應加載A
和B
,就像選擇標准I
一樣,則僅將分區B
加載到分區微調器中。 我該如何實現?
您應該在第一個微調器中偵聽更改,然后相應地更改第二個微調器。
您可以執行以下操作:
standardNameSpinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
List<String> values = findDivisionNamesBasedOnStandardName(parent.getItemAtPosition(position));
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(
view.getContext(), android.R.layout.simple_spinner_item, android.R.id.text1);
divisionNameSpinner.setAdapter(adapter);
}
});
在findDivisionNamesBasedOnStandardName方法中,您必須返回有關參數的相關部門名稱作為所選標准名稱。
編輯:
對於映射部分,創建一個類似的類:
public class Subject {
String standardId;
String standardName;
String divisionId;
String divisionName;
}
然后將所有結果放入List<Subject>
。 然后,您可以在此列表上進行迭代,然后findDivisionNamesBasedOnStandardName
將如下所示:
public List<String> findDivisionNamesBasedOnStandardName(String standardName) {
List<String> result = new ArrayList<>();
for (Subject subject : mSubjects) {
if (subject.standardName == standardName) {
result.add(subject.divisionName);
}
}
return result;
}
其中mSubjects
是從JSON響應中提取的所有主題的列表。
好。 我幾乎可以為您提供幫助。
做兩個微調器。
之后,將setOnItemSelectedListener都設置為兩者。
制作兩個方法filterOne(int selectedId)
, filterTwo(int selectedId)
。
偽代碼:
Spinner first,second;
SpinnerAdapter firstAdapter, secondAdapter;
filterOne(int id) {
secondAdapter = new CustomSpinnerAdapter(id);
second.setAdapter(secondAdapter);
}
filerTwo(int id) {
firstAdapter = new CustomSpinnerAdapter(id);
first.setAdapter(firstAdapter);
}
ArrayList<Date> dates;
CustomSpinnerAdapter(int id) {
dates = new ArrayList<Date>();
// on click from first spinner. set data to second.
if(id == 0) {
dates.add(new Date(2015, 06, 10));
dates.add(new Date(2015, 06, 11));
} else if(id == 1) {
// on click from second spinner. set data to first.
dates.add(new Date(2015, 06, 10));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.