安卓项目经验总结

安卓项目经验总结

我觉得安卓把第一行代码看了之后,做项目是提升技术最快的方法了。可能最开始不会写,那就在网上找模板,先把别人的读懂了,再添加到自己的代码中。用别人的代码会出现各种各样的bug,我最开写代码时就是把别人某一部分代码复制过来,然后发现可以运行但总是在打开的时候报错,出现NullPointerException异常。
我总结一下我遇到的空指针异常的情况

  1. 当程序运行时,对象未初始化或为空。检测一下报错位置的变量是否初始化了。
  2. 往往遇见情况的反而是你已经初始化了还是报空指针异常。比如xml布局文件中对应的控件名不正确,比如我应该用androidx.开头的控件,然后我从别人那复制过来的时候是android开头的,我们就要主要检查变量绑定的控件名是否正确。
  3. 由于生命周期的顺序先后问题,尤其是在Fragment当中,比如onCreate在onCreateView之前执行,而我们却在onCreate方法中操作了onCreateView中才初始化的对象。

onCreateView是创建的时候调用,onViewCreated是在onCreateView后被触发的事件,且onStart运行时间位于onViewCreated之后

二.在自定义Toolbar中添加Menu选项

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);//首先在onCreate中设置可以有这个menu选项
    }

@Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        //把Java文件对应的xml转化成view对象
        //inflater()的作用就是将一个用xml定义的布局文件查找出来,与findViewById()的区别,inflater是加载一个布局文件,而findViewById则是从布局文件中查找一个控件。
        myView = inflater.inflate(R.layout.wardrobe, container, false);
        //后面就是动态添加控件到view对象中
        toolbar = myview.findViewById(R.id.toolbar1); //必须加载完布局文件之后才能绑定控件,否则绑定的布局是一个空对象,因为其没有具体的布局文件对象
        return myView;
    }
 @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }
    
@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //在进行操作之前,确保toolbar初始化完成
        ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
        ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);
        toolbar.inflateMenu(R.menu.toolbar);
    }
 
@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.toolbar, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

三.写一个xml布局文件的时候先想好大致框架再往里面添加控件

<DrawerLayout>
	<CoordinatorLayout>
         <AppBarLayout>	
             <Toolbar/>
             <TabLayout/>
         </AppBarLayout>	
         <ViewPager/>
	</CoordinatorLayout>
	<NavigationView/>
</DrawerLayout>

四.Activity和Fragment之间的联系和区别

1.生命周期的不同

  • Activity有7个生命周期,而Fragment有11个生命周期。
    在这里插入图片描述

  • 所以Fragment比较与Activity来说会更加灵活,因为生命周期多了,你可以控制的地方也就多了。

2.fragment可以直接在XML文件中添加

<fragment
	Android:id="@+id/test_fragment1"
	Android:name="com.example.fragmenttest.TestFragment1"/>

3.fragment可以在一个界面上灵活的替换一部分页面,activity 只能进行跳转切换。
4.fragment和Activity之间的通信

  • fragment控制fragment:得到一个Activity,然后通过这个Activity的
    getFragmentManager()获得该Fragment的实例。

getFragmentManager到的是activity对所包含fragment的Manager,而如果是fragment嵌套fragment,那么就需要利用getChildFragmentManager()了

getSupportFragmentManager()主要用于支持 3.0以下android系统API版本,3.0以上系统可以直接调用getFragmentManager() ,因为fragment是3.0以后才出现的组件。

  • fragment控制Activity:每个Fragment都可以通过getActivity()得到一个活动。MainActivity activity=getActivity();

    要在fragment中更新UI时,我们必须在runOnUiThread()的前面添加getActivity()
    在这里插入图片描述

  • Activity控制fragment:xxxFragment xxx=getFragmentManager().findFragmentById();

  • Activity控制Activity:这个显然是通过Intent活动之间的通信完成。

5.fragment和Activity中控件的加载

  • Fragment的载入是通过OnCreateView的时候通过inflater.inflate()加载布局
  • Activity的载入是通过OnCreate的时候通过setContentView()加载布局

五.JSON数据获取与解析、使用开放接口

1.遇到这样的URL需要在解析JSON数据时手动加上 http: 或者 https:
在这里插入图片描述
2.遇到网络问题或者没有报错显示异常的问题,先把原来的app删了再重装试试

猜你喜欢

转载自blog.csdn.net/weixin_44139445/article/details/104972824