android - 在 onCreate 中初始化了 imageview 但仍然为 null

标签 android

我想实现以下目标:用户单击一个按钮后,将当前布局(主)更改为另一个布局,另一个布局加载了图像。但是我不断收到错误消息说“空对象引用上的虚方法'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)'”。下面是我的mainactivity.java和'另一个layout'.xml

public class MainActivity extends AppCompatActivity {


    private Button mybtn;
    private ImageView myimage;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    public void init(){

        myimage = (ImageView) findViewById(R.id.imgview);
        mybtn = (Button) findViewById(R.id.btn);
        mybtn.setOnClickListener(new MyListener());
    }

    public class MyListener implements View.OnClickListener {

        @Override
        public void onClick(View v){
            switch (v.getId()){

                case R.id.btn:
                    setContentView(R.layout.the_other_layout);
                    initMap();
            }
        }
    }

    public void initMap(){

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inScaled = false;
        Bitmap bmp = null;
        bmp = BitmapFactory.decodeResource(getResources(),R.drawable.somepngfile,options);
        myimage.setImageBitmap(bmp);
    }
}

下面是the_other_layout xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imgview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal"
        />

</LinearLayout>

编辑:

如果您遇到类似问题,请查看下面的答案

最佳答案

问题在这里:

case R.id.btn:
          setContentView(R.layout.the_other_layout);
          initMap();

删除这个:

setContentView(R.layout.the_other_layout);

不能在一个Activity中设置两个layout。

编辑

对于全屏 ImageView :

 public void initMap(){
       myimage.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
       myimage.setImageDrawable(R.drawable.your_image);
       myimage.setScaleType(ImageView.ScaleType.FIT_XY);
   }

关于android - 在 onCreate 中初始化了 imageview 但仍然为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43172990/

相关文章:

android - Firebase 存储规则

android - 如何使用 RxJava 和 retrofit 2 从多个 API 获取数据

java - 为什么可以使用这些抽象方法?

android - 在 Android DatePickerDialog 中选择多个日期

java - Image Adapter + Gallery 成像循环

android - 如何为 ConstraintLayout View 添加不同的权重

Android ScaleAnimation 不缩放可点击区域

android - Flutter Text 小部件无法识别某些字符,而是显示 "?"

java - 如何在 NavigationDrawer 中使用 Google map ?

java - 恢复savedInstanceState不起作用