私のアプリのUIには、ツイートのタイムラインを表示するListViewがあり、OnItemLongClickListener
いくつかのボタン([返信]、[リツイート]、[お気に入り]など)で別のビューを表示するように設定されています。アダプタのgetView()
メソッド内。
必要なもの:テストプロジェクトでは、タイムラインの最初の項目をロングクリックしてから、ボタンの1つをクリックして、この機能をテストしたいと思います。
コードの一部は次のようになります。
timelineList.getChildAt(0).performLongClick();
favoriteBtn = (ToggleButton)timelineList.getAdapter().getView(0, null, timelineList).findViewById(cse.ust.twittermap.R.id.favorite);
favoriteBtn.performClick();
favoriteBtn.performClick();
timelineList.getChildAt(0).performLongClick();
これは機能しますが、2行目を次のように変更しようとすると次のようになります。
timelineList.getChildAt(0).findViewById(cse.ust.twittermap.R.id.favorite);
nullfindViewById()
を返すため、テストプロジェクトはNullPointer例外をスローします。
私の質問:ListAdapter#getView()
との違いは何ListView#getChildAt()
ですか?
どちらもリスト内のアイテムビューへの参照を返すことができるようですが、明らかにそれらの間にはいくつかの違いがあるはずです。getChildAt()
また、2行目のメソッドがIDによるビューの検索に失敗する理由を理解したいと思います。