3

データベースがあり、そこからリストビューにデータをロードしています。ユーザーがリストビューを最後までスクロールしてデータベースからさらに 20 項目を取得し、リストビューに追加した後、データベースから 20 項目を取得するように書いていますが、リストビューへの読み込みで 1 つまたは 2 つの項目を読み込む際に問題があります。リストビューにデータが表示されません。私のコードは次のとおりです。

private ListviewAdapter adapter;
list.setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView arg0, int arg1) {

    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, final int totalItemCount) {
        if (totalItemCount > 0)
        {
            int lastInScreen = firstVisibleItem + visibleItemCount;
            if(lastInScreen == totalItemCount)
            {
                Parcelable state = list.onSaveInstanceState();

                //Fill my_array
                adapter = new ListviewAdapter(MainActivity.this, my_array);
                list.setAdapter(adapter);
                list.onRestoreInstanceState(state);
            }
        }
    }
});

読み込まれたデータが画面よりも大きい場合は正常に動作しますが、読み込まれたデータが画面よりも小さい場合、リストビューに何も表示されません。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

3

アダプターをクラス変数として取得し、アダプターを設定し、onCreate(..) ListView の最後に到達してリスト ビューを更新しmy_array.clear();たら、データをクリアしてからリストビュー アダプターに通知します。

コード例:

Class myclass extends Activity
{
 private ListviewAdapter adapter;
 private ArrayList<String> my_array;

 onCreate(...)
  {
   //Fill Values in the Array
   my_array.add(...);
   adapter = new ListviewAdapter(MainActivity.this, my_array);
   list.setAdapter(adapter);
   ....

   //In your onScrollListener() of the list make the following changes
   list.setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView arg0, int arg1) {

    }
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, final int totalItemCount) {
        if (totalItemCount > 0)
        {
            int lastInScreen = firstVisibleItem + visibleItemCount;
            if(lastInScreen == totalItemCount)
            {
                my_array.clear();
                //Add the values in you Array here.
                my_array.add(....)
                //Notify the adapter about the data set change.
                adapter.notifyDatasetChanged();
            }
        }
    }
});

EDIT
リストビュー内の検出されないボタンクリックの問題について。
カスタム リストビューのレイアウト ファイルで onClick 属性を設定するだけです。

<Button
        ......
        android:onClick="btnRemoveClick"
        />

onClick メソッドで、クリック イベントの実装を行います。

public void btnRemoveClick(View v)
{
    //get the position of the button here
    final int position = listviewItem.getPositionForView((View) v.getParent()); 
}

PS: ListView オブジェクトをクラス変数として設定する必要があります。

于 2013-07-20T14:23:43.277 に答える