zoukankan      html  css  js  c++  java
  • 【ImageView】ImageView点击事件报错空指针

    今天在使用自定义圆形imageview的时候,想利用其点击事件来实现查看个人资料功能,但是该空间在Activity中的onCreate方法中调用点击事件总是出现空指针异常,每次程序都进不去主页面,到处查,和同学商量,还是没有解决,最后还是看到了网友的一句话:

    • 控件A是在子布局中使用的控件,如果子布局未能成功加载,A也无法使用

    意思也就是,如果 子布局在初始化界面的时候没有加载,但是你要用子布局中的控件,肯定是行不通的,所以要先在加载子布局之后实例化控件,然后定义各种操作;

    下面给出我的例子:

    1. 这种事不行的,子布局中的控件在onCreate方法中实例化
       1 public class Main2Activity extends AppCompatActivity
       2         implements NavigationView.OnNavigationItemSelectedListener {
       3 
       4 
       5 
       6     @Override
       7     protected void onCreate(Bundle savedInstanceState) {
       8         super.onCreate(savedInstanceState);
       9         requestWindowFeature(Window.FEATURE_NO_TITLE);
      10         setContentView(R.layout.activity_main2);
      11 
      12         //实例化自定义控件
      13         RoundImageView ivAvatar= (RoundImageView)findViewById(R.id.right_login_head);
      14 
      15         //设置点击事件
      16         ivAvatar.setOnClickListener(new View.OnClickListener() {
      17             @Override
      18             public void onClick(View v) {
      19                 Toast.makeText(Main2Activity.this, "Test onclick", Toast.LENGTH_SHORT).show();
      20 
      21             }
      22         });
    2. 这种是可以的,首先要获得ImageView的父布局实例,navigationView,再根据父布局实例获得ImageView,
       1 //实例化DrawerLayout布局控件
       2         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
       3         /*ActionBarDrawerToggle实现了DrawerListener,所以他能做DrawerListener可以做的任何事情,
       4         同时他还能将drawerLayout的展开和隐藏与actionbar的app 图标关联起来,当展开与隐藏的时候图标
       5         有一定的平移效果,点击图标的时候还能展开或者隐藏菜单。*/
       6 
       7         //使用ActionBarDrawerToggle来监听
       8         ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       9                 this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
      10         drawer.setDrawerListener(toggle);
      11         toggle.syncState();
      12         //实例化NavigationView
      13         NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
      14         //调用getHeaderView方法获得Header
      15         View headerView = navigationView.getHeaderView(0);
      16         //通过Header来获取自定义控件
      17         ivAvatar = (ImageView) headerView.findViewById(R.id.right_login_head1);

    不管怎样,解决了这个问题,以后要留心此类问题,记得控件实例的先后顺序,不然就会找不到,造成空指针异常

  • 相关阅读:
    论文笔记:目标检测算法(R-CNN,Fast R-CNN,Faster R-CNN,FPN,YOLOv1-v3)
    论文笔记:IRGAN——A Minimax Game for Unifying Generative and Discriminative Information
    springer论文模板参考文献的顺序问题
    CIFAR和SVHN在各CNN论文中的结果
    论文笔记:CNN经典结构2(WideResNet,FractalNet,DenseNet,ResNeXt,DPN,SENet)
    latex常用符号
    python中的引用传递,可变对象,不可变对象,list注意点
    ImageNet历年冠军和相关CNN模型
    matplotlib 的颜色
    调整matplotlib的图例legend的位置
  • 原文地址:https://www.cnblogs.com/csschn/p/5307922.html
Copyright © 2011-2022 走看看