我是一名Android开发者,我需要一些帮助。 我有一个活动(活动1),其中有一个名为" MORE"的按钮,点击后会将我带到另一个活动。这很好用。 我有另一项活动(活动2)。当我点击一个复选框时,我需要按下按钮" MORE"在活动中看不见1。 我发现了其他类似的问题,但这是一个错误,我无法弄清楚。
我在活动1中将按钮设为静态
public static Button btn2;
在活动2中,我将其设置为不可见
public void onClick(View view) {
Intent i;
switch (view.getId()) {
case R.id.checkBox2:
// set invisible button more in stock quotes
StockDetail.btn2.setVisibility(View.INVISIBLE);
break;
default:
break;
}
}
抛出这个错误:
java.lang.NullPointerException:尝试调用虚方法' void android.widget.Button
我在此链接中发现了类似的问题: Android: Hide button from another activity 我确实喜欢这样,但它仍然没有。如果有人可以帮助我,我感激不尽。谢谢
答案 0 :(得分:0)
我认为你应该通过SharePreference文件保存一个变量,如isShow(boolean)。当您打开activity1时,您将在sharepreference文件中获得价值。 如:如果是真的 - >你会为按钮设置可见。
答案 1 :(得分:0)
不要使用任何可能使用context
的变量(如按钮),因为它可能极易受到内存泄漏的影响。通常有各种设计模式来避免这些。
针对您的案例的简单解决方案可以使用Activity2
从Activity1
开始startActvityForResult()
。在此设置中,Activity1
需要Activity2
的某种结果。在你的情况下,它将是你的按钮的状态。要了解有关它的更多信息,请访问此[非常小的]官方培训文档:Getting a Result from an Activity。
如果你遇到任何问题,请告诉我们。
答案 2 :(得分:0)
您可以像这样应用空点检查
if(StockDetails.btn2 != null)
{
StockDetails.btn2.setVisiblity(View.Gone);
}
答案 3 :(得分:0)
在创建StockDetail之前,这将无效。或者,您可以在StockDetail类中创建一个静态变量,如下所示: -
public class StockDetail extends Activity{
public static int buttonVisibility=View.VISIBLE;
@override
public void onCreate(Bundle savedInstanceState){
setContentView(R.layout.act2);
Button btn=(Button)findViewById(R.id.btn);
btn.setVisibilty(buttonVisibility);
}
和来自Activity1
public void onClick(View view) {
Intent i;
switch (view.getId()) {
case R.id.checkBox2:
// set invisible button more in stock quotes
StockDetail.buttonVisibility=View.INVISIBLE;
break;
default:
break;
}
}
尝试以上方法可能对您有所帮助。