2011-02-04 11 views
0

私は最近登場した奇妙な問題があります。最初は、ListView内のすべてのアイテムをロードしていました。それはすべてうまくスクロールしていた。アイテムはクリック可能で、すべて正常に動作していました。私はと付け加えた私のアダプタのgetViewメソッドで次にTabHostのリストビュースクロール/クリックの問題

if(pos == getCount() - 1){ 
    Log.i("Load", "Load database"); 
    load_database(getCount(), 5); 
} 

、ここではload_database()

private void load_database(long offset, long count) { 
    ArrayList<VKContent> objs = BaseApplication.db.get_all(Message.class, MessageHandler.COLUMN_MAILBOX + " = " + mailbox, count, offset); 
    for(VKContent obj: objs){ 
     adp.add((Message)obj); 
    } 
} 

がある問題は、その直後に現れました。ロード時には、load_databaseを一度呼び出すとすべてがうまくいきます。 ListViewは正常に動作します。クリックは処理されます。しかし、一度私は "pos == getCount() - 1"に達する。新しいデータが読み込まれますが、アイテムをクリックすることは現在不可能です。私がスクロールしてチラチラをすると、画面上のタッチがチラシを止めません。 flinch中にスクロールしようとすると、flinchが止まるまで何の効果もありません。

別のタブに切り替えると、リストビューの動作が復元されます。スクロールボールを使ってアイテムをフォーカスしようとすると、通常の動作も戻ってきます。

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@android:id/tabhost"> 

    <LinearLayout 
    android:orientation="vertical" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"> 

     <TabWidget android:id="@android:id/tabs" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" /> 

     <FrameLayout android:id="@android:id/tabcontent" 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent" 
      android:layout_weight="1"> 
      <LinearLayout android:id="@+id/tab2" 
       android:orientation="vertical" 
       android:layout_height="fill_parent" 
       android:layout_width="fill_parent"> 
       <ListView android:id="@+id/lv" 
        android:layout_height="fill_parent" 
        android:layout_width="fill_parent" 
        android:clickable="true" /> 
      </LinearLayout> 
     </FrameLayout> 
    </LinearLayout> 
</TabHost> 

編集私は無効にしてみました

()、forceLayout()、requestLayout()、isFocusable()... BringToFront関数...などload_database後。しかし何も助けなかった。

編集2 ほとんどのコードを忘れてしまった。

tabHost.setCurrentTab(1); 
    tabHost.setCurrentTab(0); 

何らかの理由で、TabHostに問題があります。私のListViewはすべてのタブで共有されています。ビューが最初に読み込まれるとき、何も表示されませんでした。だから私は2番目のタブから最初のタブに切り替えなければならなかった。

答えて

0

私はtabHostなしで動作するかどうかを調べた後、問題は解決したので、まだ動作していないことに気付きました。だから、古いコードを見ると、私は自分の遅延ロード機能が実際にバックグラウンドで実行されたダウンロードスレッドを呼び出していて、ダウンロードが完了した後でuiThreadに戻ることに気付きました。

上記のコードとの違いは、load_databaseが別のスレッドで実行されていないことです。私のアダプターの関数であるgetView関数から実行されます。言い換えれば、それは明らかにgetViewのアダプターを更新するためにリストビューを中断します。

私の現在の修正は、最良のものではありませんが、今のところそれは仕事です。未来に。

if(pos == getCount() - 1){ 
    MessagesActivity.this.load_more = true; 
} 

@Override 
public void onUserInteraction() { 
    super.onUserInteraction(); 

    if(load_more == true || adp.getCount() == 0){ 
     load_more = false; 
     load_database(adp.getCount(), 5); 
    } 
} 

そのように、load_databaseがgetViewメソッドからrunnedされることはありません。私のアダプターは問題なくlistviewを更新します。

関連する問題