解决方案 »

  1.   


    从这里来看好像是监听器问题,但是我找不出错误在哪,58行代码如下还有,我断点调试的时候savedInstanceState的值为null
      

  2.   

    你所有的控件都在同一个Activity上吗?如果不在,那么你要加上
    View rootView = (LayoutInflater.from(context)).inflate(resource, root); 
    //context是你的上下文,一般可以用this,如果在辅助类里面就需要自己传一个context了;
    //resource是你的布局,R.Layout.xxx;
    //root是ViewGroup一般为NULL;
    (Button)rootView.findViewById(R.id.resister_housemaster_backbutton);
      

  3.   

    这个很明显,是你的这个button不在activity的主view上吧?在实例化的这行里这么写:
    mTrueButton = (Button)xxxview.findviewById(R.id.true_button);
    其中的xxxview是你这个button所在的view。
      

  4.   


    把View.OnClickListener改为OnClickListener,试下?
      

  5.   

    要么是你加载的xml有误 要么是加载的xml中这个button的名字错误 或者xml中有2个控件的名字都是true_button  clean一下工程试一下了
      

  6.   

    我操 你就不能把整个activity的代码复制出来么
      

  7.   

    要么是你加载的xml有误 要么是加载的xml中这个button的名字错误 或者xml中有2个控件的名字都是true_button  clean一下工程试一下了
      

  8.   

    package com.bignerdranch.android.geoguiz;import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;public class QuizActivity extends Activity { private Button mTrueButton;
    private Button mFalseButton;
    private Button mNextButton;
    private TextView mQuestionTextView;

    private TrueFalse[] mQuestionBank=new TrueFalse[]{
    new TrueFalse(R.string.question_oceans,true),
    new TrueFalse(R.string.question_mideast,false),
    new TrueFalse(R.string.question_africa,false),
    };

    private int mCurrentIndex=0;

     

    private void checkAnswer(boolean userPressedTrue){
    boolean answerIsTrue=mQuestionBank[mCurrentIndex].isTrueQuestion();

    int messageResId=0;

    if(userPressedTrue==answerIsTrue){
    messageResId=R.string.correct_toast;
    }
    else{
    messageResId=R.string.incorrect_toast;
    }
    Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);//activity实例创建后调用该方法
    //setContentView(R.layout.activity_quiz);//获取activity的用户界面,即生成指定布局的视图并将其放置在屏幕上

    mQuestionTextView=(TextView)findViewById(R.id.question_text_view);
     
    mTrueButton=(Button)findViewById(R.id.true_button);//引用已生成的组件,返回一个视图对象
     
    mTrueButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub 
    checkAnswer(true);
    }
    });
    mFalseButton=(Button)findViewById(R.id.false_button);
     
    mFalseButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
        checkAnswer(false);
    }
    });

    mNextButton=(Button)findViewById(R.id.next_button);
    mNextButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    mCurrentIndex=(mCurrentIndex+1)%mQuestionBank.length;
    updateQuestion();

    }
    });
    setContentView(R.layout.activity_quiz);//获取activity的用户界面,即生成指定布局的视图并将其放置在屏幕上
    updateQuestion();
    }
    private void updateQuestion(){
    int question=mQuestionBank[mCurrentIndex].getQuestion();
    mQuestionTextView.setText(question);
    } @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.quiz, menu);
    return true;
    }  
    }
    这是整个activity。只有一个activity,刚开始学,碰到这个错误一直都过不了。把view.onClickListener改成onClickListener貌似不行,且xml也没有错。。先多谢大家了。
      

  9.   

    为什么45行要注掉?!都没有给定layout怎么完成的初始化?!
      

  10.   

    在83行有哦,把45行写到了后面83行,因为我运行错误嘛,有人建议setonContentView要在findViewById后面,所以就放在了后面,结果还是不行
      

  11.   

    楼主知道//setContentView(R.layout.activity_quiz);是什么意思吗?你都没有给系统说你要加载什么布局,然后你就告诉系统  mQuestionTextView=(TextView)findViewById(R.id.question_text_view); 
    打个比方,你要去某地拜访某人,你知道拜访的是谁,但是没有地址,你怎么去?这系统不给你包空指针才怪了。
    你说你放后面了,你这个逻辑都没弄清楚。汗。
    setContentView(R.layout.activity_quiz);这一句如果没有加修饰语句,(比如要求不要标题栏/全屏之类的)那么一般位于super.onCreate(savedInstanceState);之后,并且紧随其后。
    通俗点说吧,你要找到你写在XML里面的控件是通过 this.findViewById ,但是你的这些控件都画在R.layout.activity_quiz这个rootView上,这前面这个this指的就是这个rootView,你都没告诉系统在哪里找控件,就直接让系统找控件。你自己觉得能找到吗?
      

  12.   

      @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);//activity实例创建后调用该方法
            //setContentView(R.layout.activity_quiz);//获取activity的用户界面,即生成指定布局的视图并将其放置在屏幕上
             这个setContentView不能注释掉,必须在onCreeate方法里面调用。而且必须是在最上边。没有理由,在Activity创建的时候必须加载XML布局文件。
      

  13.   

    太感谢了,setContView的用途给我解释的很清楚,之前我就是太想急于求成  上手项目了,所以才这么囫囵吞枣,连原理都没弄懂就只想做出东西了,接下来我会改变学习方法和方向了,真的非常感谢你!,无奈我积分不多,所以不能给你更多的分  
      

  14.   

    嗯嗯,搞清楚setContentView(R.layout.activity_quiz)的用法了,小女子万分感谢!
      

  15.   

     //setContentView(R.layout.activity_quiz);这句注掉怎么能找到对象view.
      

  16.   

    要先加载layout啊,然后才能实例控件,没有爹哪来的儿子