我正在尝试构建一个类似测验的应用程序来猜测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方法
答案 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