Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:从自定义活动调用主活动中的方法时,应用程序崩溃_Android_Android Intent_Android Activity - Fatal编程技术网

android:从自定义活动调用主活动中的方法时,应用程序崩溃

android:从自定义活动调用主活动中的方法时,应用程序崩溃,android,android-intent,android-activity,Android,Android Intent,Android Activity,我正在尝试构建一个类似测验的应用程序,用于在android中猜测标志。基本上,我有一个名为SetFlagActivity的活动,如果单击按钮,它将从MainActivity中的startFlagActivity(视图v)接收意图。它需要做两件事:#1如果用户输入了正确的标志名称,则加载一个新标志;#2显示消息:“正确”,否则只显示“错误” 按下按钮时,将显示正确的消息,但包含标志图像的ImageView将消失。另外,当再次单击按钮时,应用程序会崩溃,并出现以下情况 我假设该图像不会出现,因为它显

我正在尝试构建一个类似测验的应用程序,用于在android中猜测标志。基本上,我有一个名为SetFlagActivity的活动,如果单击按钮,它将从MainActivity中的startFlagActivity(视图v)接收意图。它需要做两件事:#1如果用户输入了正确的标志名称,则加载一个新标志;#2显示消息:“正确”,否则只显示“错误”

按下按钮时,将显示正确的消息,但包含标志图像的ImageView将消失。另外,当再次单击按钮时,应用程序会崩溃,并出现以下情况

我假设该图像不会出现,因为它显示在MainActivity中,所以我使用finish()返回。这修复了应用程序崩溃的问题,但当我再次单击按钮时,什么也没有发生……没有显示任何消息。因此,问题是如何正确使用SetFlagActivity以显示我的消息并设置新图像

任何帮助都将不胜感激

这将获取输入并发送意图

public void startFlagActivity(View v){
    EditText flagInput = (EditText) findViewById(R.id.inputFlag);
    String message = flagInput.getText().toString();
    Intent intent = new Intent(MainActivity.this, SetFlagActivity.class);
    if(!message.equals(""))
        intent.putExtra("flag", message);
        MainActivity.this.startActivity(intent);
}
我的SetFlagActivity如下所示:

package ivve.projects.flags;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SetFlagActivity extends Activity {
  protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    Button button= (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startFlagActivity(v);
        }
    });
        TextView text = (TextView) findViewById(R.id.displayAnswer); 
        Intent intent = getIntent();
        String value = intent.getStringExtra("flag"); 
        if(value.equals("Iceland")){
            text.setText("correct");
        }
        else{
            text.setText("wrong"); 
        }
    finish();
    }
}
Edit1:StartFlagActivity本身实际上不是一个活动…它是MainActivity内部的一个函数
Edit2:我已按照建议将onClick处理程序添加到我的SetFlagActivity中,但我得到一个错误“类型new View.OnClickListener(){}的方法startFlagActivity(View)未定义”,这不允许我调用startFlagActivity方法

03-08 20:52:59.539: E/AndroidRuntime(9399): java.lang.IllegalStateException: Could not find a method startFlagActivity(View) in the activity class ivve.projects.flags.SetFlagActivity for onClick handler on view class android.widget.Button with id 'button'
03-08 20:52:59.539: E/AndroidRuntime(9399):     at android.view.View$1.onClick(View.java:2131)

您忘记在
SetFlagActivity
内部声明
startFlagActivity(视图)
。可能您在
SetFlagActivity

中设置了错误的布局。您在activity_main.xml中声明了按钮(id=button),并通过onClick属性将按钮的OnClickListener设置为引用startFlagActivity方法。您要做的是检查TextView是否包含正确答案,如果是,则继续,否则保留在此页面中。一个建议是在onCreate()中初始化TextView变量。在这里,当它为您工作时,您每次单击都会初始化它

现在,您已经在MainActivity中扩展了此视图

setContentView(R.layout.activity_main.xml); // This inflates the layout.
// Now you dynamically have set the flag. This is not part of the activity_main.xml
您已经在MainActivity()中声明了startFlagActivity(),其背后的逻辑是新活动应该启动(当单击按钮时),并将答案作为参数传递给intent。新启动的意图将检查答案是否正确,如果是,将显示正确

现在回答您的第一个问题:图像视图消失。发生这种情况是因为您已经膨胀了activity_main.xml,但是ImageView是在MainActivity中动态创建的,并且在SetFlagActivity中不存在(此屏幕中基本上没有图像)。这就是为什么地图消失了,但布局的其余部分保持不变

然后,当您再次单击该按钮时,当前显示的活动SetFlagActivity的onClick()方法(或者在本例中为startFlagActivity()方法)不存在,因此您收到错误日志,指出SetFlagActivity屏幕不存在onClick()方法startFlagActivity()。我希望这是有道理的。现在单击按钮将不会生成任何内容,因为没有代码来备份它(也会生成错误日志)。我希望你现在看到你的逻辑有缺陷

你不需要开始新的活动。你可以根据其他条件完成它。您的算法是:

If (answer = correct)
    setImageView -> new drawable;
    repeat process;
else
    show wrong and repeat;

我希望这能有所帮助。

'R.id.displayAnswer'此文本视图属于哪个布局?。另外,我觉得当您启动intent时,finish()发生在oncreate()中。这真的很快。您可以尝试在完成之前设置一个等待计时器,如sleep()或wait(),等待1秒或其他时间,以测试您的代码。我没有看到任何与您谈论的图像相关的代码??R.id.displayAnswer属于activity_main.xml布局。我应该在这个活动中使用finish方法还是在我调用intent的活动中使用finish方法?您需要通过startFlagActivity()定义onClickListener方法,因为这是您将onClick()方法设置为.Ahh的方法。。我知道你现在做了什么-我将编辑我的答案,并为你指出你需要走的方向。我是否总是必须在被称为活动的活动中声明调用它的活动?你会怎么做?谢谢。我想说的是,我必须在我当前的活动中声明刚刚调用它的活动,这有点奇怪……startFlagActivity实际上是按钮的onClick事件函数。按钮是在my main.xml中定义的,这个android:onClick=“startFlagActivity”根据您发布的日志,应用程序希望startFlagActivity(视图)出现在SetFlagActivity()中,但它的格式不正确?。您已在SetFlagActivity上展开了activity_main。如果此按钮出现在activity_main.xml中,则SetFlagActivity应具有startFlagActivity()方法。你能给我们看一下activity_main.xml吗?这是我的activity_main.xml…正如我说的,按钮是在这里定义的,我编辑了答案。您已删除日志。。你们能试用一下我发布的内容,看看你们收到了什么日志吗?你们能再解释一下按钮点击处理程序吗?我有点困惑…如果我在SetFlagActivity中定义按钮侦听器,它会做什么…如果单击按钮,我仍然必须从某个地方调用此活动?