android:App在自定义活动的Main活动中调用方法时崩溃

时间:2014-03-08 20:43:06

标签: android android-intent android-activity

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

按下按钮时会显示正确的信息,但包含该标志图像的ImageView会消失。此外,当再次单击该按钮时,应用程序崩溃并跟随output:

我认为图片没有出现,因为它显示在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,但是我收到错误“方法startFlagActivity(View)未定义类型new View.OnClickListener(){} ”which doesn'允许我调用startFlagActivity方法

2 个答案:

答案 0 :(得分:2)

您已在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(),其背后的逻辑是应该启动新的Activity(当单击按钮时),并将答案作为intent的参数传入。新启动的意图将检查答案是否正确,如果是,则显示正确。

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

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

您无需开始新活动。您可以根据if-else条件完成它。你的算法是:

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

我希望这会有所帮助。

答案 1 :(得分:0)

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)

您忘记在startFlagActivity(View)内声明SetFlagActivity。也许您在SetFlagActivity

中设置了错误的布局