在其他 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 - 这就是我失败的原因思考? ;)
那么所有的视图和方法都可以相互引用。
总体而言,我对 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 - 这就是我失败的原因思考? ;)
那么所有的视图和方法都可以相互引用。