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

Initialised ImageButton in other Activity throws nullPointerException when referenced in MainActivity

总体而言,我对 Android 和 Java 编码还很陌生,所以如果我不了解基本概念,请耐心等待。这只是一个测试,看看是否可行, 所以它最初可能没有任何意义。

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

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

主要部分 Activity:

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);
}

其他Activity的一部分:

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 链接到其他 Activity:

    <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)

如果我遗漏了您需要使用的任何东西,请拍摄,我会尽可能提供:) 最佳

按钮的可见性总是"VISIBLE",请给我日志 并且在 navFav activity 中 "fab" 方法不在 onCreate

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

如果使用布局文件调用'setContentView',则只能引用该布局文件中的视图。

尝试告诉我们您想要实现的目标,我们也许可以帮助您改进代码。

您收到 nullPointerException,因为 ID 为 favpancake 的 ImageButton 在 MainActivity 布局中不存在 activity_main

public class navfav extends AppCompatActivity {

public static List<String> recipes;

// other code here

}

然后当您想要将食谱添加到其他 Activity listView 中时,

recipes = new ArrayList<String>(); 

recipes.add(recipe);

现在,当您打开另一个 Activity 时,所有这些食谱都将在列表名称 "recipes" 中可用。你可以用它来显示在你的列表视图中。

(代表OP发表).

刚在别处读了一堆其他东西,我觉得现在有些道理了!我没有在更改 layout/pages 时创建新的 intents 和 startActivity'ies,而是将 ContentView 设置为新的 layouts/pages,并将来自不同活动的所有方法收集到一个 activity - 这就是我失败的原因思考? ;)

那么所有的视图和方法都可以相互引用。