调用函数来显示/隐藏来自另一个类的图像视图

时间:2012-10-02 07:22:19

标签: java android

在我的MainActivity类中,我有这个方法:

MainActivity.java

public void ClearImageViews() {
  final ImageView image_a = (ImageView)findViewById(R.id.image_a);
  image_a.setVisibility(View.INVISIBLE);
 }

在另一个文件中,我有另一个类,它调用ClearImageViews方法:

 MainActivity mainActivity = new MainActivity();
 mainActivity.ClearImageViews();

我在运行findViewById函数的代码时得到NullPointerExpection。当我注释掉这些内容时:

 final ImageView image_a = (ImageView)findViewById(R.id.image_a);
 image_a.setVisibility(View.INVISIBLE);

代码效果很好。我究竟做错了什么?

4 个答案:

答案 0 :(得分:2)

您可能没有在setContentView()中为所需的xml布局调用MainActivity

您需要在setContentView(R.layout.your_layout)中调用MainActivity,其中your_layout是您拥有ImageView的xml文件。

或者如果你不能这样做(因为你需要在MainActivity中使用另一个布局),你必须给你的ImageView充气。阅读有关膨胀视图的信息。

答案 1 :(得分:1)

通过执行MainActivity mainActivity = new MainActivity();您正在创建新的活动实例。这与正在运行的活动不同。
对于您创建的新的onCreate未调用,因此未设置内容,findViewById返回null ...
您需要使用回调函数以适当的方式调用ClearImageViews() ..

另一个解决方案是使方法ClearImageViews()保持静态,然后使用:

调用它
MainActivity.ClearImageViews()

答案 2 :(得分:1)

Activity作为其ImageView字段的Context传递给另一个类。

现在使用这样的东西......

class AnotherClass extends Activity{


 OriginalClass o;

 public AnotherClass(OriginalClass oo){

   this.o = oo;


}


final ImageView image_a = (ImageView)this.o.findViewById(R.id.image_a);

                // Use this.o.findViewById like above.

}

答案 3 :(得分:0)

我通过将其他类从顶级类移动到MainActivity的成员类来解决了我的问题。通过这种安排,我可以从其他班级访问findviewbyid。