0

例如,mainActivity.java 文件确实是集群的,为了保持它干净,我创建了第二个 .java(class),我将在按下按钮时执行一些代码。我根本不知道该怎么做。而且我也不确定要使用什么搜索词,因此如果已涵盖,我深表歉意。

这是我在“测试”应用程序中的内容。

我有一个主要活动,上面有一个按钮。

package com.test.secondclass;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    Button startButton;
    final Intent second = new Intent(getApplicationContext(), testClass.class);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startButton = (Button)findViewById(R.id.button1);

        startButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                startActivity(second);

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

现在这是我制作的“第二”类,现在记住这很短,我只是将它用于锻炼计划,然后再将其实施到我的实际程序中。

package com.test.secondclass;

import android.app.Activity;
import android.widget.Toast;

public class testClass extends Activity{

    public void onCreate(){
        Toast.makeText(getApplicationContext(), "Second class thinger started", Toast.LENGTH_LONG).show();
    }
}

如果我尝试这个,我会立即关闭。如果我在我的主要活动开始时注释掉“意图”部分,那么程序就会运行。但它没有做我想要的。明显地。感谢大家

4

3 回答 3

0

添加一个OnClickListener以向 testClass 发送任何信息,如下所示(未经测试):

button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        Intent secondIntent = new Intent();
        secondIntent.setClassName(myPackageName, "testClass");
        startActivityForResult(secondIntent, REQUEST_CODE);
});

参考这里这里

于 2012-11-18T23:58:46.600 回答
0

这是我的观点:由于您试图在没有上下文的情况下打开用户界面方法(例如 Toast),因此您正在接收强制关闭。

重要提示:我假设您已经在 manifest.xml 文件中定义了这两个类!

在解释之前,我先做一个简短的说明: Toast:这个类打开一个快速消息,接收上下文、消息和显示时间作为主要参数; 上下文:它是显示的“环境”。类似于视觉范围的东西,它定义了您拥有的资源。在大多数情况下,您可以使用setContentView方法进行设置。

在我看来,问题解释: “崩溃”发生是因为您在没有上下文的情况下打开 Toast 消息。活动是与视图页面非常相似的 UI 控件。如果你调用一个新的活动,它就像调用一个新的页面,所以,一个新的上下文。在第二个活动中,我没有看到任何上下文。我认为您假设上下文是从第一个活动中保留下来的,但这并不是因为它是一项新活动。

怎么修:

  • 在第二个类中,使用setContentView定义布局视图,或者...
  • 将您的第二个类重新实现为Service,并通过startService调用它,或者...
  • 定义一个AIDL机制(类似于以前的修复,但更复杂和复杂,因为它支持异步方法调用)。

希望它在某种程度上有所帮助。

于 2012-11-19T00:22:56.587 回答
0

谢谢大家的回答!!在显示 Toast 消息后,我实际上能够通过使用“stopSelf()”命令来做我想做的事。我实现了一个服务类,当我按下按钮时,testClass.java 类被调用并运行“toast”消息,然后立即通过“stopSelf()”命令退出。我通过包含一个“onDestroy()”方法来确保这一点,该方法还显示了一个简单的 toast 消息,确认服务正在停止:)。我通常使用线程来做这样的事情,但无论我做了多少格式化,它都会让主要活动变得非常混乱。所以我想有一个单独的班级我可以使用。

对于评论者 EfEs,我来自 C# 语言的 windows 编程。Android 对我来说是一个新的游乐场,我还在学习。我认为我做得很好,但不知道该怎么做。但我当时想通了。并感谢您澄清 android 中的 Activity 就像 C# 中的“WindowsForm”,它对用户来说是全新的 GUI。我不知道。但感谢大家帮助我写你的帖子!

于 2012-11-19T03:47:56.070 回答