其他Activity中初始化的ImageButton在MainActivity中引用时抛出nullPointerException

时间:2017-05-05 20:59:10

标签: java android nullpointerexception imagebutton findviewbyid

我对Android和Java编码一般都很陌生,所以如果我不理解基本概念,请耐心等待。这只是一个测试,看看是否有效,所以最初可能没有没有任何意义。

我有两个活动,主要和其他。 其他活动有一个imageButton,其可见性最初设置为不可见。 创建MainActivity时,它应该在Other活动中查找该imageButton,并将其视图设置为可见。

虽然在调试时,我得到的只是nullPointerException,因为按钮的值为null。如何让它引用按钮?

主要活动的一部分:

public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    pstep();
}


public void pstep() {
    int pstep = 0;
    ImageButton panfav = (ImageButton) findViewById(R.id.favpancake);
    panfav.setVisibility(View.VISIBLE);
}

其他活动的一部分:

public class navfav extends AppCompatActivity {
ImageButton panfav = (ImageButton) findViewById(R.id.favpancake);
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.navfav);
}
    public void fab(View v){
    ImageButton panfav = (ImageButton) findViewById(R.id.favpancake);
    panfav.setVisibility(View.VISIBLE);
}

链接到其他活动的XML:

    <ImageButton
    android:id="@+id/favpancake"
    android:layout_width="wrap_content"
    android:layout_height="137dp"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/imageView3"
    android:background="@android:color/background_dark"
    android:contentDescription="@string/nav_cook_dish"
    android:onClick="fab"
    android:scaleType="centerCrop"
    android:src="@drawable/dishpancake"
    android:visibility="invisible" />

日志:

java.lang.NullPointerException: Attempt to invoke virtual method 'void 
android.widget.ImageButton.setVisibility(int)' on a null object reference

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 
'void android.widget.ImageButton.setVisibility(int)' on a null object reference
at com.p2.rookie.MainActivity.pstep(MainActivity.java:23)
at com.p2.rookie.MainActivity.onCreate(MainActivity.java:16)

拍摄如果我错过了你需要使用的任何东西,我会尽我所能提供:) 最好

2 个答案:

答案 0 :(得分:0)

一个活动可以而且不应该引用其他活动中的元素。

如果你打电话给&#39; setContentView&#39;使用布局文件,您只能引用该布局文件中的视图。

尝试告诉我们您尝试实现的目标,并且我们可以帮助您改进代码。

答案 1 :(得分:0)

(代表OP发布)

在其他地方阅读其他一些东西,我认为现在有意义了!我不是在更改布局/页面时创建新的意图和startActivity',而是将setContentView设置为新的布局/页面,并在一个活动中收集来自不同活动的所有方法 - 我觉得这个失败的基本原理是什么? ;)

然后所有的观点和方法都可以相互引用。