GeoQuiz项目总结

GeoQuiz项目总结:

虽然小时候写过日记但博客还是第一次写,没啥经验,就简单看一看吧。

这个项目是根据书上的内容step by step做下来的,说不上什么和别人不同的地方,唯一不同的可能就是会报出一些和别人不一样的错误吧。

首先说一下在做这个项目的过程中不足的地方吧:

  • 做的过程中,对书上的代码有些理解不够,所以在按照书上内容敲得时候会有疑问,速度会比较慢。还是要对多加练习。

  • 遇到问题放着不解决,再遇到还是会抓狂。

  • 忽视挑战练习,只做书上有的代码完成基本要求。

言归正传,总结项目。

项目要求:给出一道道地理知识,用户点击TRUE或者FALSE按钮来回答屏幕上的问题,GeoQuiz即时作出反馈。

项目结构:

涉及的知识点

  • 国际化定义方式:values-语言代号-地区代号,如values-zh-rCN:表示简体中文-中国,创建以此命名的目录,然后在创建相应的资源文件

  • string.xml用来存储字符串资源,方便实现语言的国际化

    <string name="warn_text">Are you sure want to do this?</string>
    <string name="show_answer_button">SHOW ANSWER</string>
    <string name="cheat_button">CHEAT!</string>
    <string name="judgment_toast">Cheating is wrong.</string>
    
  • 生命周期的七个方法:onCreate()、onStart()、onRestart()、onResume()(在Activity启动并与用户进行交互时调用此时Activity处于栈的顶部)、OnPause()(出现在一个Activity之上启动带透明背景视图或小于屏幕尺寸视图的新的Activity)、onStop()、onDestory()

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         Log.d(TAG,"onCreate(Bundle) called");      //添加日志输出代码
         setContentView(R.layout.activity_quiz);
            ```````
    }
    @Override
    public void onStart(){
        super.onStart();
        Log.d(TAG,"onStart() called");
    }
    @Override
    public void onPause(){
        super.onPause();
        Log.d(TAG,"onPause() called");
    }
    @Override
    public void onResume(){
        super.onResume();
        Log.d(TAG,"onResume() called");
    }
    @Override
    public void onStop(){
        super.onStop();
        Log.d(TAG,"onStop() called");
    }
    @Override
    public void onDestroy(){
        super.onDestroy();
        Log.d(TAG,"onDestroy() called");
    }
    

当屏幕旋转时,会销毁当前的Activity,重新创建一个新的Activity实例(要保存以前的数据,覆盖onSaveInstanceState(Bundle()方法))

@Override
public void onSaveInstanceState(Bundle savedInstanceState){
    super.onSaveInstanceState(savedInstanceState);
    Log.i(TAG,"onSaveInstanceState");
    savedInstanceState.putInt(KEY_INDEX,mCurrentIndex);

}
  • Intent

    • 类型:显式Intent:用于启动组件、服务

      隐式Intent:指定需要执行的action(Action、Data和Category)

    • Extras:包含具体用于组建实际处理的数据信息

    • Flags:Intent的元数据,决定Android对其操作的行为

    • 应用场景

      • 传递数据
      Intent data= new Intent();
      data.putExtra(EXTRA_ANSWER_SHOWN,isAnswerShown);
      
      public static boolean wasAnswerShown(Intent result){
          return result.getBooleanExtra(EXTRA_ANSWER_SHOWN,false);
      }
      
      • 获取数据

        mAnswerIsTrue= getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE,false);
        
    • 启动第二个Activity

mCheatButton.setOnClickListener(new View.OnClickListener() {//设置监听
    @Override
    public void onClick(View view) {
       /* Intent intent=new Intent(QuizActivity.this, CheatActivity.class);  */
        boolean answerIsTrue =mQuestionBank[mCurrentIndex].isAnswerTrue();
        Intent intent = CheatActivity.newIntent(QuizActivity.this,answerIsTrue);

      /* startActivity(intent);*/
     startActivityForResult(intent,REQUEST_CODE_CHEAT);
    }
});

GeoQuiz页面

上一题与下一题
//返回上一题
mPreButton=(ImageButton) findViewById(R.id.pre_button);
mPreButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        mCurrentIndex=(mCurrentIndex-1)%mQuestionBank.length;
       if(mCurrentIndex == 0) {
           Toast.makeText(QuizActivity.this,"这是第一个哦,没有前一个啦!",Toast.LENGTH_SHORT).show();
        }
        mIsCheater=false;
        updateQuestion();

    }
});
//下一题
mNextButton=(ImageButton)findViewById(R.id.next_button);//为next按钮设置监听
mNextButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        mCurrentIndex=(mCurrentIndex+1)%mQuestionBank.length;
     /*  int question=mQuestionBank[mCurrentIndex].getmTextResId();
        mQuestionTextView.setText(question);*/
         mIsCheater=false;
         updateQuestion();             //调用updateQuestion()方法,拿出问题
    }
});


当屏幕旋转后

点击cheat按钮后:

遇到的问题

  • 实例化一个数组,匿名类
    • 使用匿名类,可以相对集中的实现监听器方法,一眼可见
    • 事件监听器一般只在一个地方使用,使用匿名内部类,不应频繁的创建繁琐的匿名类
private Question[] mQuestionBank=new Question[]{
        new Question(R.string.question_australia,true),
        new Question(R.string.question_oceans,true),//实例化一个数组,匿名类
        new Question(R.string.question_mideast,false),
        new Question(R.string.question_africa,false),
        new Question(R.string.question_americas,true),
        new Question(R.string.question_asia,true),
};
  • 如果遇到了怎么也解决不了的问题,很烦躁,试试清除缓存文件吧,哈哈哈

第一篇博客就写到这里啦。从开始做这个项目到结束前后断断续续持续了一周左右的时间,从准备写博客到结束也用了三四天左右,其实多数都是准备工作以及不知道怎么下手,总的来说呢,这就是一个血与泪的心酸史啊。不过呢,在写这段话的时候啊,心情轻的要飞上天。

不过呢,不足之处,还是多多谅解啊。

posted @ 2017-09-16 15:35  王家的小娃娃呀  阅读(281)  评论(0编辑  收藏  举报