实际上我想从另一个活动中调用一个活动的函数..我为此编写一个简单的代码但它不工作..并显示运行时错误..请检查代码...如果有任何错误..
activity1的代码:
public class Activity1 extends Activity2
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
call();
}
public void call()
{
showToast("Helloo");
}
}
activity2的代码:
public class Activity2 extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void showToast(String s)
{
EditText t=(EditText)findViewById(R.id.editText1);
t.setText(s);
}
}
答案 0 :(得分:3)
您的问题是您在不存在的视图上调用findViewById
。
Activity1
正在扩展Activity2
。
您拨打super.onCreate
中的Activity1
,呼叫onCreate
中的Activity2
,setContentView()
调用R.layout.main
。
我猜你的文字R.id.editText1
在主要版面中。
当Activity1
从通话super.onCreate
返回时,会立即将内容布局重置为main2
。
您尝试编辑的编辑文本框不再存在。 findViewById
无法找到它,因为布局未处于活动状态。因此它崩溃了。
要解决此问题,请尝试以下方法:
public class Activity1 extends Activity2
{
private EditText et;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
et = (EditText) findViewById(R.id.editText2);
call();
}
public void call()
{
showToast("Helloo", et);
}
}
R.id.editText2
是布局main2
中的编辑文本框。
在Activity2中:
public class Activity2 extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void showToast(String s, EditText t)
{
t.setText(s);
}
}
答案 1 :(得分:2)
首先,这是一个糟糕的设计原则,因为一次只有一个活动处于活动状态。你可以使方法静态,然后你可以交叉调用它们,但那时它应该在某种常见的util类中。
答案 2 :(得分:1)
最简单的方法是将showToast()
方法声明为public static
,这样您就可以在没有Activity2
实例的情况下调用它。
答案 3 :(得分:1)
如果你把它作为静态放置,你应该在主要活动上声明它