Webサービスのデータをロードするための1つのExpandable Listビューを含むAndroidアプリケーションを開発していますが、起動時にデータ全体を読み込むのではなく、親リストをロードしてから親リストをクリックします。リストビューの特定のアイテムの子アイテムをロードして、最初にそれが可能かどうかを確認します。子供のアイテムを動的に追加するにはどうすればいいのですか親のアイテムonClickアンドロイドの展開可能なリストビューですか?
ありがとうございました
Webサービスのデータをロードするための1つのExpandable Listビューを含むAndroidアプリケーションを開発していますが、起動時にデータ全体を読み込むのではなく、親リストをロードしてから親リストをクリックします。リストビューの特定のアイテムの子アイテムをロードして、最初にそれが可能かどうかを確認します。子供のアイテムを動的に追加するにはどうすればいいのですか親のアイテムonClickアンドロイドの展開可能なリストビューですか?
ありがとうございました
私はAPIの外観を知る必要があります。この「親」データが何であっても、いくつかのAPIから来る可能性がありますか?そして、あなたは別のAPIコールからこの "子"データを取得できますか?それが行うことができる
一つの方法は次のとおりです。
UIに結合するときに、戦略のいくつかの並べ替えを持っている必要があり、覚えておいてください
の注意すべき事。このリストはどれくらい大きいですか?ページを変更する必要がありますか?あなたはそのページネーションをどうやって扱いますか?どのように/アイテムのリストをキャッシュしますか?ユーザーエクスペリエンスはどのように見えますか?
これはすべてのものであり、さらに多くのことを考えることができます。
retrofit/okhttp、sqlite/realm、Picasso(画像を展開する場合)、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;
}
});
リターン真のクリックを "消費" しますクリックするとグループのデフォルト展開を停止します。そのため、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