Find current view in ViewPager

A hack to find the current view (index) in a ViewPager

Note: ViewPager.getCurrentItem() : if the ViewPager starts up on a view different from the first view, getCurrentItem() still returns the first position, i.e., 0, and will do so until the ViewPager has been paged.

private int getCurrentPageIndex(ViewPager vp){
    int first,second,id1,id2,left;
    id1 = first = second = 99999999;
    View v;
    for ( int i = 0, k = vp.getChildCount() ; i < k ; ++i ) {
        left = vp.getChildAt(i).getLeft();
        if ( left < second ) {
            if ( left < first ) {
                second = first;
                id2 = id1;
                first = left;
                id1 = i;
            } else {
                second = left;
                id2 = i;
    return id2;



Android: Memory Leaks

  1. Non-static instances of anonymous classes hold an implicit reference to their outer class, so the context will be leaked

Cyanogenmod File Manager – “root access mode”

Enable root-access mode in cm13:

The file manager will only show the option to use root mode if it detects root, and it has a bug that it only looks for root at /system/xbin/su. You can work around the bug by running the following command with /system mounted r/w:

ln -s /sbin/su /system/xbin/su

Android adb “no permissions”

Under cm13

putzing around with usb options – PTP – gets this working.

also, helps to start server as user root, e.g. sudo su; adb shell …



Android – how to handle a crash


AsyncTask – Order of Execution / Versions

Order of execution

When first introduced, AsyncTasks were executed serially on a single background thread. Starting with DONUT, this was changed to a pool of threads allowing multiple tasks to operate in parallel. Starting with HONEYCOMB, tasks are executed on a single thread to avoid common application errors caused by parallel execution.

If you truly want parallel execution, you can invoke executeOnExecutor(java.util.concurrent.Executor, Object[]) withTHREAD_POOL_EXECUTOR.