class和getClass()的区别
生活随笔
收集整理的這篇文章主要介紹了
class和getClass()的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前幾天做項目,覺得自己都開發一年多了,還沒有自己封裝的類,感覺真是白做了,再加上,看到自己的代碼,我都不忍心看,有的時候,還需要自己去讀自己寫的代碼,亂亂糟糟的,實在不忍心看,沒辦法,重現在開始吧,把自己需要的,都封裝起來,用到什么的時候,在哪來用,方便,快捷
首先是自己封裝的基類baseActivity,不廢話,直接上代碼(其他的就不貼出來了,只有這個地方有錯誤)
package com.demo.XXX.XX.base;import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText;import com.demo.XXX.XXX.tools.LogUtil; import com.demo.XXX.XXX.tools.ShareUtils;/*** Created by XXX on 2016/9/26.*/ public abstract class BaseActivity extends Activity {private String TAG;protected Context context;protected ShareUtils shareUtils;protected LayoutInflater inflater;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);context = this;inflater = LayoutInflater.from(context);TAG = getClass().getName();LogUtil.i("BaseActivity", TAG);shareUtils = new ShareUtils(context);}/*** 初始化控件或者數據*/protected abstract void initView();/*** 初始化點擊事件*/protected abstract void setListener();/*** 單一的activity的跳轉** @param mClass 跳轉的類*/public void start_activity(Class<?> mClass) {startActivity(new Intent(context, mClass.getClass()));}/*** 帶傳遞參數的跳轉** @param mClass 跳轉類* @param key 跳轉key值* @param value 跳轉value值*/public void start_activity(Class<?> mClass, String key, String value) {startActivity(new Intent(context, mClass).putExtra(key, value));}/*** 帶傳遞參數的跳轉** @param mClass 跳轉類* @param key 跳轉key值* @param value 跳轉value值*/public void start_activity(Class<?> mClass, String key, int value) {startActivity(new Intent(context, mClass).putExtra(key, value));}/*** 帶傳遞參數的跳轉** @param mClass 跳轉類* @param key 跳轉key值* @param value 跳轉value值*/public void start_activity(Class<?> mClass, String key, Bundle value) {startActivity(new Intent(context, mClass).putExtra(key, value));}/**** 點擊空白處 隱藏軟鍵盤* @param ev* @return*/@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_DOWN) {View v = getCurrentFocus();if (isShouldHideKeyboard(v, ev)) {hideKeyboard(v.getWindowToken());}}return super.dispatchTouchEvent(ev);}/*** 根據EditText所在坐標和用戶點擊的坐標相對比,來判斷是否隱藏鍵盤,因為當用戶點擊EditText時則不能隱藏** @param v* @param event* @return*/private boolean isShouldHideKeyboard(View v, MotionEvent event) {if (v != null && (v instanceof EditText)) {int[] l = {0, 0};v.getLocationInWindow(l);int left = l[0],top = l[1],bottom = top + v.getHeight(),right = left + v.getWidth();if (event.getX() > left && event.getX() < right&& event.getY() > top && event.getY() < bottom) {// 點擊EditText的事件,忽略它。return false;} else {return true;}}// 如果焦點不是EditText則忽略,這個發生在視圖剛繪制完,第一個焦點不在EditText上,和用戶用軌跡球選擇其他的焦點return false;}/*** 獲取InputMethodManager,隱藏軟鍵盤** @param token*/private void hideKeyboard(IBinder token) {if (token != null) {InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);}} }
原本以為自己封裝的不錯,挺滿意的,哈哈,我也有自己封裝的代碼了,以后在完善下,直接用這個框架做項目,那還不嗖嗖的,想想都覺得開森
開始在使用activity跳轉的時候,用的自己封裝好的start_activity方法,結果一盆涼水澆在了我的頭上,直接報錯
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.demo.neu/java.lang.Class}; have you declared this activity in your AndroidManifest.xml?找不到這個類?我明明已經在androidManifest里邊注冊了啊,為啥還提示找不到這個類,試試Google提供的startac方法,看看
竟然可以跳轉,那為啥,我封裝的不能跳轉呢,也沒有啥問題啊,把androidManifest里邊的那個類刪除,再次用Google的startactivity方法做跳轉看看,結果報錯
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.demo.XXX/com.demo.XXX.XXX. activity.LoginActivity}; have you declared this activity in your AndroidManifest.xml?咦,錯誤竟然不一樣,好吧,那就不是類沒有注冊的問題了,再看看自己封裝的方法吧,仔細看的時候才發現,原來問題出在這里 /*** 單一的activity的跳轉** @param mClass 跳轉的類*/public void start_activity(Class<?> mClass) {startActivity(new Intent(context, mClass.getClass()));}而下邊的封裝 /*** 帶傳遞參數的跳轉** @param mClass 跳轉類* @param key 跳轉key值* @param value 跳轉value值*/public void start_activity(Class<?> mClass, String key, String value) {startActivity(new Intent(context, mClass).putExtra(key, value));}在單一跳轉的哪里竟然使用了class.getClass(),去掉getClass(),運行成功,可以跳轉,那么問題來了,class和getClass()有啥區別呢,細心的你可能發現了,問題就在這里
com.demo.neu/java.lang.Class和 com.demo.XXX/com.demo.XXX.XXX.activity.LoginActivity這就是問題所在了,前邊的報錯是java里邊的long類型,因為在long類型里邊沒有loginActivity這個類,所以出現錯誤,而后便是指定的一個具體的類,就是說沒有在androidMainfest里邊沒有注冊了一個是類型里邊的類,一個是具體的activity的類,當然錯誤不一樣了,當然出現問題了
我替你們踩坑了,以后封裝的小伙伴注意了,別再犯我這么低級的錯誤了,唉
總結
以上是生活随笔為你收集整理的class和getClass()的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1. RDMA概述
- 下一篇: Nightmare Ⅱ(双向BFS)