2011-12-20 4 views
1

私は以下を試みたが、getChildAtは常にnullを返すので運がなかった(私はlistViewがいっぱいであると確信している)。ListViewの最初の項目(または任意の位置)の選択をシミュレートする方法は?

listView.performItemClick(listView.getChildAt(0), 0, listView.getChildAt(0).getId()); 

お勧めはありますか?ありがとう!

編集:ActionStreamAdapterがクラスであるリスト

  lvAdapter = new ActionStreamAdapter<HasDescription>(getBaseContext()); 
      while ((item = actionStreamQueue.poll()) != null) { 
      ... 
       lvAdapter.addItem(item); 
      } 
      ListView.setAdapter(lvAdapter); 

にアイテムを追加するためのコードは、BaseAdapterを拡張します。キューは、単純なデータスチールクラスのDaoを呼び出すことによって満たされます。

+0

これはいつ行うのですか? ListViewはまだレンダリングされていない可能性が高いので、子はありません。これは、onCreateまたはonResumeでこれを実行しようとしている場合に当てはまります。 – dmon

+0

いいえ私は既に言及しているように私はそれをやっていない。ListViewは確かに満たされている。ジョーディによると、getChildAtは私が望むことをしません。 – Han

答えて

1

チャイルドとアイテムには違いがあります。子ビューは、ビュー階層の下位にあるビューです。たとえば、2つのTextViewを含むLinearLayoutがある場合、TextViewsはLinearLayoutの子です。 ListViewには項目があります。これらはListViewと同じ階層レベルにあるため、子ではありません。これらはListViewの項目です。代わりにListView.getItemAtPosition()を使用してください。

次に、選択とクリックの間に違いがあります。クリックとは、アイテムに対してアクションを実行し、アイテムを強調表示していることを意味します。最初のアイテムを選択するには、次のような操作を行う必要があります。ListView.getItemAtPosition()n).requestFocus()

+0

違いを教えてくれてありがとう!実際にgetChildメソッドを試してみる前に、getItemAtPositionを試しましたが、ViewではなくObjectを返すように見えます(そして1つにキャストできません)。何か案が? – Han

+0

返されるオブジェクトのタイプは、リストをデータにバインドするために使用されるアダプタによって異なります。リストを埋めるコードを提供した場合、この作業を行う方法のコード例を示します。 – Jordi

+0

が編集されました。だから、get項目はクラスが少数のStringとlongを格納している単純なオブジェクトを返す – Han

0

これは、ビューアイテムのポインタを取る面白いAPIです。通常、リストビューアイテムはリサイクルされ、 0、アダプターの0番目の項目である必要はありません。 findViewWithTagTraversal()を使用してビューを検索し、そのビューで選択を行うことができます。

選択に何をしたいのか気にしない場合、または最初の項目に注目したいのですか?

setSelection()を使用することができます

+0

私は実際にデフォルトで最初の項目を選択してハイライトしたいと思っています...今度は1つの項目をクリックすると強調表示され、アクティビティの右側に表示されます(タブレットのGmailアプリのようなもの)。 – Han

+0

setSelectionは必要な操作を行いますか? –

+0

本当に.. setSelectionはリストをスクロールして、特定の項目を上に配置します(私は望みません)が、何も強調表示しません。それはちょうど焦点や何かを得るのように見える – Han

関連する問題