私は適応デザインとアンドロイドのアプリケーションを開発します。 「大土地」画面構成について (すなわち、タブレットのため)ユーザが右側(尖ったヘッダ項目の)左及び詳細情報にRecyclerViewヘッダリストデュアルパネルのインターフェースを有しています。アプリケーションの開始時にすると正しくRecyclerViewのholder.itemView.performClick()を呼び出す必要がありますか?
は、このような構成のために、空の詳細情報パネルをカバーするために、第1のヘッダのリスト項目に、ユーザーのクリックをエミュレートするために良いだろう。
質問「どのように」RecyclerViewは非常に人気があり、回答されているため、項目をクリックをエミュレートする: Clicking on item programmatically in RecyclerView、など。
しかし、私は質問に対する答えを見つけることができません「WHEN」私は正常に呼び出すことができますビューを所有している私のフラグメントからのitemView.performClick()
?
マイ方法:
public void clickItem(int position) {
if (null == mRecyclerView)
return;
SingerViewHolder holder = (SingerViewHolder) mRecyclerView.findViewHolderForAdapterPosition(position);
if (null == holder)
return;
holder.itemView.performClick();
}
performClick()
スキップホルダーは、任意の位置(例えば、0)がヌルであるためです。 私は明白な答えを見つけた:RecyclerViewは、私はmAdapter.clickItem(0);
はもちろん、私は、アダプタを設定した後、それを呼び出すとさえ)(notifyDataSetChangedでネットワークからヘッダリスト情報を取得した後に呼び出したときの瞬間にはまだそのコンテンツを作成していません。
ここに:Clicking on item programmatically in RecyclerViewは、RecyclerViewコンテンツを作成するためにアンドロイドに与えるために、itemView.performClick()
の前に小さな一時停止を追加することを提案しました。 これは正しい方法ですか? How to know when the RecyclerView has finished laying down the items? しかし、それをやって:
mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (ScreenConfiguration.getScreenConfigurationState() ==
Constants.ScreenConfigurationState.TABLET_LANDSCAPE)
/// dual-panel mode => click 1'st singer list item
mAdapter.clickItem(1);
}
});
我々はとにかくViewHolderゼロに取得し、私は確信して..そう
はないとは思わない私は右、私は他の回避策を試してみたのです。また、このリスナーが多く、何度も発射し、できるだけ早く除去しなければならない。..
(looooong先史時代のために残念)
だから、質問は次のとおりです。適切にViewHolder貴重なを取得するRecyclerViewのための任意の正しいコールバックがあります?