android:从自定义活动调用主活动中的方法时,应用程序崩溃
我正在尝试构建一个类似测验的应用程序,用于在android中猜测标志。基本上,我有一个名为SetFlagActivity的活动,如果单击按钮,它将从MainActivity中的startFlagActivity(视图v)接收意图。它需要做两件事:#1如果用户输入了正确的标志名称,则加载一个新标志;#2显示消息:“正确”,否则只显示“错误” 按下按钮时,将显示正确的消息,但包含标志图像的ImageView将消失。另外,当再次单击按钮时,应用程序会崩溃,并出现以下情况 我假设该图像不会出现,因为它显示在MainActivity中,所以我使用finish()返回。这修复了应用程序崩溃的问题,但当我再次单击按钮时,什么也没有发生……没有显示任何消息。因此,问题是如何正确使用SetFlagActivity以显示我的消息并设置新图像 任何帮助都将不胜感激 这将获取输入并发送意图android:从自定义活动调用主活动中的方法时,应用程序崩溃,android,android-intent,android-activity,Android,Android Intent,Android Activity,我正在尝试构建一个类似测验的应用程序,用于在android中猜测标志。基本上,我有一个名为SetFlagActivity的活动,如果单击按钮,它将从MainActivity中的startFlagActivity(视图v)接收意图。它需要做两件事:#1如果用户输入了正确的标志名称,则加载一个新标志;#2显示消息:“正确”,否则只显示“错误” 按下按钮时,将显示正确的消息,但包含标志图像的ImageView将消失。另外,当再次单击按钮时,应用程序会崩溃,并出现以下情况 我假设该图像不会出现,因为它显
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中定义按钮侦听器,它会做什么…如果单击按钮,我仍然必须从某个地方调用此活动?