Android遇到的一些問題匯總

一.資源文件報空指針,轉(zhuǎn)換異常,但是明明寫的都是正確的,那么這個時候,需要考慮下下面這種情況?

1.當我們的Android程序有多個module的情況下,如果在有模塊引入別的模塊的情況,主模塊的資源文件會覆蓋子模塊所有的資源,導致子模塊獲取的資源是主模塊的資源。
2.這里的資源文件(layout,string,color,style等)但是不包含id,如果不同模塊的id相同的話,這個是沒有問題,除了包含id的layout也相同,這樣就會用主模塊的id了。

二.我只是啟動一個應用程序,為什么Application的onCreate執(zhí)行了多次?

答:在啟動應用程序的時候,linux中調(diào)用fork創(chuàng)建的子進程,將共享父進程的代碼空間,復制父進程數(shù)據(jù)空間,此時子進程會獲得父進程的所有變量的一份拷貝。如果這個時候第三方框架會啟動新的進程,那么也會執(zhí)行接下來的Application的代碼,所以會執(zhí)行多次了。

三.View.setVIsibility(Gone)的時候,不起作用,或者出現(xiàn)gone的那一塊控件為黑色?

答:修改布局的設置:

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/vis_or_gone"http://通過這個id來控制Visible還是Gone
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:visibility="gone">

            //這里放置你要Visible和Gone的布局
        </LinearLayout>
    </RelativeLayout>

四.華為手機和三星手機,popupwindow中包含EditText的時候,當EditText獲取焦點,整個popupwindow的背景都變透明?

答:這個需要我們在popupwindow的contentView的背景設置為想要的顏色,而且contentView中包含的子控件,如果是樹頂?shù)目丶ň褪亲钌蠈语@示的控件)也需要設置我們想要的背景色,這樣popwindow就不會變成透明了。

五.Tablayout + ViewPager + fragment 切換時生命周期不調(diào)用?

答:我們在寫自己的fragmentAdapter的時候,將tag和position綁定起來,比如下面的

public class BaseFragmentAdapter extends TabFragmentAdapter {
    private FragmentManager mFragmentManager;
    private SparseArray<String> mFragmentTags;

    public BaseFragmentAdapter(@NonNull FragmentManager fm, @NonNull List<String> titles, @NonNull List<Fragment> fragments) {
        super(fm, titles, fragments);
        mFragmentManager = fm;
        mFragmentTags = new SparseArray<>();
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Object object = super.instantiateItem(container, position);
        if (object instanceof Fragment) {
            Fragment fragment = (Fragment) object;
            String tag = fragment.getTag();
            mFragmentTags.append(position, tag);
        }
        return object;
    }

    public Fragment getFragment(int position){
        String tag = mFragmentTags.get(position);
        if(StringUtil.isStringEmpty(tag)){
            return null;
        }
        return mFragmentManager.findFragmentByTag(tag);
    }

}

然后在vp切換的回調(diào)方法中調(diào)用:

 mViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                Fragment currentFragment = mTabFragmentAdapter.getFragment(position);
                if ((0 == position || position == mTabFragmentAdapter.getCount() - 1) && null != currentFragment) {
                    currentFragment.onResume();
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

上面的是調(diào)用onResume的什么周期,其他你們也是可以處理的。

六.Android中對某個View頻繁設置Visible和Gone的時候,有的時候會出現(xiàn)Gone卻Gone不掉的情況?

答:這種情況,多半是因為View還沒有計算好自己的寬高,所以Gone不掉,我們一般可以在如下方式:

    YouView.post(new Runnable() {
            @Override
            public void run() {
                rlOptionByEmployee.setVisibility(View.GONE);
                }
            });

或者是在我們設置View的狀態(tài),gone之后,再增加如下的代碼:

    YouView.requestLayout();
    YouView.invalide();

七.Android的Popupwindow在7.0以上的設備,用showAsDropDown的時候,當我們設置match_parent的時候,會全屏鋪滿?

答:可以考慮下專門為支持7.0以上的設備顯示的popupwindow。

八.ScollView或者RecyclerView等自動滾動的處理?

答:ScrollVIew自動滾動的解決方案

github地址如果你覺得有用,歡迎star,如果你們有補充的,歡迎fork提交,以后還會持續(xù)更新的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容