我正在開發一個Android應用程序,該應用程序包含一個用於從Web服務加載數據的可擴展列表視圖,但我不想在啓動時加載整個數據,但首先加載父列表,然後單擊父列表,展開子列表的特定列表項列表視圖加載特定項目的子項目,所以首先它可能與否?如何動態添加子項目onClick在父項目可擴展列表視圖在android中?
謝謝
我正在開發一個Android應用程序,該應用程序包含一個用於從Web服務加載數據的可擴展列表視圖,但我不想在啓動時加載整個數據,但首先加載父列表,然後單擊父列表,展開子列表的特定列表項列表視圖加載特定項目的子項目,所以首先它可能與否?如何動態添加子項目onClick在父項目可擴展列表視圖在android中?
謝謝
我需要知道api的樣子。無論這個「父母」數據是什麼,可能來自一些API?你可以從另一個API調用中檢索這個「孩子」數據嗎?它可以做
一種方法是:
事情要注意的
記住,綁定到用戶界面時,你應該有某種策略。這份名單有多大?它需要分頁嗎?你將如何處理分頁?你如何/將在哪裏緩存你的物品清單?用戶體驗應該是什麼樣子?
這些都是需要考慮的東西,還有更多。
你應該研究的一些東西是retrofit/okhttp,sqlite/realm,畢加索(如果你想擴大圖像),CursorAdapter(分頁)。
我不完全確定你的問題是什麼意思,但如果你想要的是動態加載BaseExpandableListAdapter中的子項目,例如當你點擊相關的組頭(如下)時加載「子項」,我有一個解決方案。
v Group header 1 | -- Child item 1 | -- Child item 2 v Group header 2 | -- Child item 1 | -- Child item 2
在你的活動,找到自己的ExpandableListView這樣的:
ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.expandable_list_view);
然後添加一個監聽器來檢查組點擊:
expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener()
{
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id)
{
if (expandableListView.isGroupExpanded(groupPosition))
expandableListView.collapseGroup(groupPosition);
else
new BackgroundTask(groupPosition).execute();
return true;
}
});
返回true,將 「消費」 的點擊並在您點擊它時停止組的默認擴展。這就是爲什麼在你的ASyncTask中,你需要手動擴展它。如果返回false,則列表視圖將自動在GUI中展開,直到您摺疊並重新展開組爲止,纔會看到背景計算的結果。
在我的代碼中,我有一個SparseBooleanArray來跟蹤數據是否已經爲給定組設置,並且我在onGroupClick()方法中檢查了該值;我這樣做是爲了在擴展一個組的時候只需要加載一次數據,但顯然,如果你想在每次擴展時改變數據,你就不會想要這樣。你的問題很含糊,所以我不確定你的使用情況是什麼。
private class BackgroundTask extends AsyncTask<Void, Void, List<ReturnType>>
{
int groupPosition;
private BackgroundTask(int groupPosition)
{
this.groupPosition = groupPosition;
}
@Override
protected List<ReturnType> doInBackground(String... params)
{
// TODO: Do your background computation...
// Then return it
}
@Override
protected void onPostExecute(List<ReturnType> resultsList)
{
super.onPostExecute(resultsList);
// TODO: Add the resultsList to whatever structure you're using to store the data in the ListView Adapter
expandableListView.expandGroup(groupPosition);
}
}
我不確定這是否是最好的方法,但它確實對我有效。
確定:您使用的是哪個適配器? 'CursorTreeAdapter'? – pskink
不,我正在使用BaseExpandableListAdapter。使用BaseExpandableListAdapter的 –
您需要更多的工作 – pskink