如何从另一个活动中调用一个活动的功能

时间:2011-07-08 12:08:19

标签: android

实际上我想从另一个活动中调用一个活动的函数..我为此编写一个简单的代码但它不工作..并显示运行时错误..请检查代码...如果有任何错误..

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

4 个答案:

答案 0 :(得分:3)

您的问题是您在不存在的视图上调用findViewById

Activity1正在扩展Activity2

您拨打super.onCreate中的Activity1,呼叫onCreate中的Activity2setContentView()调用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)

如果你把它作为静态放置,你应该在主要活动上声明它