Android P Settings界面一级菜单的点击事件入口

https://blog.youkuaiyun.com/long375577908/article/details/64440186

这个问题折腾了我好几天 我去

找到上面这哥们的博客 才明白

private View.OnClickListener mTileClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //TODO: get rid of setTag/getTag


            Log.e(TAG, "onClick");
            
            mDashboardFeatureProvider.openTileIntent((Activity) mContext, (Tile) v.getTag());
        }
    };

DashboardAdapter.java

点击 一级菜单 已连接的设备 的运行日志 

07-23 09:30:12.030  2607  2607 E DashboardAdapter: onClick
07-23 09:30:12.048  2013  2093 I ActivityManager: wocao START u0 {flg=0x8000 cmp=com.android.settings/.Settings$ConnectedDeviceDashboardActivity (has extras)} from uid 1000
07-23 09:30:12.136  2607  2607 D SettingsActivity: Starting onCreate
07-23 09:30:12.204  2607  2607 D SettingsActivity: Starting to set activity title
07-23 09:30:12.204  2607  2607 D SettingsActivity: Done setting title
07-23 09:30:12.204  2607  2607 D SettingsActivity: Switching to fragment com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment
07-23 09:30:12.206  2607  2607 I ConnectedDeviceFrag: getPreferenceScreenResId
07-23 09:30:12.220  2607  2607 D DiscoverableFooterPreferenceController: init
07-23 09:30:12.222  2607  2607 I ConnectedDeviceFrag: getPreferenceScreenResId
07-23 09:30:12.251  2607  2607 W ConnectedDeviceGroupController: displayPreference
07-23 09:30:12.275  2607  2607 D ConnectedDeviceFrag: NO dashboard tiles for ConnectedDeviceFrag
07-23 09:30:12.276  2607  2607 D SettingsActivity: Executed frag manager pendingTransactions
07-23 09:30:12.324  2607  2607 W ConnectedDeviceGroupController: onStart
07-23 09:30:12.358  2607  2607 D AlwaysDiscoverable: AlwaysDiscoverable start
07-23 09:30:12.373  2607  2607 E BluetoothAdapter: mode1 = 23
07-23 09:30:12.375  2607  2607 E BluetoothAdapter: mode2 = 23
07-23 09:30:12.378  2446  2460 W BluetoothAdapterService: setScanMode 
07-23 09:30:12.379  2446  2460 W BluetoothAdapterService: setScanModeasd 
07-23 09:30:12.380  2446  2628 E BluetoothServiceJni: adapter_properties_callback: Status2 is: 0, Properties: 1
07-23 09:30:12.380  2446  2460 W AdapterProperties: setScanModekkkk 
07-23 09:30:12.381  2446  2628 D AdapterProperties: Discoverable Timeout:120
07-23 09:30:12.382  2446  2628 E BluetoothServiceJni: adapter_properties_callback: Status2 is: 0, Properties: 1
07-23 09:30:12.384  2446  2628 D AdapterProperties: Scan Modex:23
07-23 09:30:12.401  2607  2607 D DashboardSummary: Stopped listening for condition changes
07-23 09:30:12.402  2607  4326 D SettingsActivity: No enabled state changed, skipping updateCategory call
07-23 09:30:12.496  2607  2607 D AlwaysDiscoverable: AlwaysDiscoverable(): onReceive android.bluetooth.adapter.action.SCAN_MODE_CHANGED

研究代码如不能从头开始研究 感觉心里没底

是不是有强迫症?

感觉这个点就是 研究下去的handle

可以从头一直贯穿到结尾

public boolean performClick() {
        // We still need to call this method to handle the cases where performClick() was called
        // externally, instead of through performClickInternal()
        notifyAutofillManagerOnClick();

        final boolean result;
        final ListenerInfo li = mListenerInfo;
        if (li != null && li.mOnClickListener != null) {
            playSoundEffect(SoundEffectConstants.CLICK);
            Log.w(VIEW_LOG_TAG, "li = " + li);
            Log.w(VIEW_LOG_TAG, "li.mOnClickListener = " + li.mOnClickListener);

            Log.w(VIEW_LOG_TAG, "this = " + this);

            li.mOnClickListener.onClick(this);
            result = true;
        } else {
            result = false;
        }

        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);

        notifyEnterOrExitForAutoFillIfNeeded(true);

        return result;
    }
frameworks/base/core/java/android/view/view.java


07-23 10:17:09.890  3110  3110 W View    : li = android.view.View$ListenerInfo@3cfe2a
07-23 10:17:09.891  3110  3110 W View    : li.mOnClickListener = com.android.settings.dashboard.DashboardAdapter$1@de5341b
07-23 10:17:09.891  3110  3110 W View    : this = android.widget.LinearLayout{85999b8 VFE...C.. ...P.... 160,208-1120,280 #7f0a00e5 app:id/dashboard_tile}
07-23 10:17:09.891  3110  3110 E DashboardAdapter: onClick
07-23 10:17:09.891  3110  3110 W System.err: simulator exception: java.lang.RuntimeException: error is here
07-23 10:17:09.892  3110  3110 D run stack: simulator
07-23 10:17:09.892  3110  3110 D run stack: java.lang.RuntimeException: error is here
07-23 10:17:09.892  3110  3110 D run stack:     at com.android.settings.dashboard.DashboardAdapter$1.onClick(DashboardAdapter.java:88)
07-23 10:17:09.892  3110  3110 D run stack:     at android.view.View.performClick(View.java:6602)
07-23 10:17:09.892  3110  3110 D run stack:     at android.view.View.performClickInternal(View.java:6574)
07-23 10:17:09.892  3110  3110 D run stack:     at android.view.View.access$3100(View.java:778)
07-23 10:17:09.892  3110  3110 D run stack:     at android.view.View$PerformClick.run(View.java:25907)
07-23 10:17:09.892  3110  3110 D run stack:     at android.os.Handler.handleCallback(Handler.java:873)
07-23 10:17:09.892  3110  3110 D run stack:     at android.os.Handler.dispatchMessage(Handler.java:99)
07-23 10:17:09.892  3110  3110 D run stack:     at android.os.Looper.loop(Looper.java:193)
07-23 10:17:09.892  3110  3110 D run stack:     at android.app.ActivityThread.main(ActivityThread.java:6669)
07-23 10:17:09.892  3110  3110 D run stack:     at java.lang.reflect.Method.invoke(Native Method)
07-23 10:17:09.892  3110  3110 D run stack:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-23 10:17:09.892  3110  3110 D run stack:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:951)
07-23 10:17:09.898  2057  3292 I ActivityManager: wocao START u0 {flg=0x8000 cmp=com.android.settings/.Settings$ConnectedDeviceDashboardActivity 

其实早就应该在view类中加入调试信息

就可快速定位到 入口点了

因为不管什么按钮条目 他的总入口只能是view

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值