Android 4.4 で ListView の高速スクロールバーが出てこなくなる件

再現させるコード。

public class TestActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ListView lv = new ListView(this);
        setContentView(lv);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                lv.getContext(), android.R.layout.simple_list_item_1);
        for (int j=0; j<100; j++) {
            adapter.add("Hello" + j);
        }

        lv.setAdapter(adapter);

        lv.setFastScrollEnabled(true);

        // ↓これを呼び出すとFastScrollerが表示されない
        adapter.notifyDataSetChanged();
    }
}

表示されない原因は FastScroller の mLongList が false になっていること。
ListView を継承したクラスで無理やり対処する方法。

public MyListView extends ListView {

Object  mFastScroller;
Method  mFastScroller_onItemCountChanged;

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);

    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT
            && isFastScrollEnabled()) {
        try {
            if (mFastScroller == null) {
                Field fFS = AbsListView.class.getDeclaredField("mFastScroller");
                fFS.setAccessible(true);
                mFastScroller = fFS.get(this);

                mFastScroller_onItemCountChanged = mFastScroller.getClass().getMethod("onItemCountChanged", int.class);
                mFastScroller_onItemCountChanged.setAccessible(true);
            }
            mFastScroller_onItemCountChanged.invoke(mFastScroller, getCount());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}