解决方案 »

  1.   

    补充下,DisplayToast函数后面有定义
      

  2.   

    你把DisplayToast("You have Clicked the Open button");注释掉,看看还有没有异常
      

  3.   

    你debug下看,我估计btnOpen为空。布局文件中没有id为btnOpen的按钮
      

  4.   

    应该就是btnOpen没绑定上,你把new View.OnClickListener直接改成 new OnClickListener吧
      

  5.   


    我在fragment_main.xml文件中定义了btnOpen(我用fragment_main.xml作布局文件)
        <Button
            android:id="@+id/btnOpen"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="open" />
      

  6.   


    改了以后,直接报错
    提示OnClickListener cannot be resolved a type
      

  7.   

    编译直接报错,就对了,改成Button btnOpen=(Button)MainActivity。this。findViewById(R.id.btnOpen);
    btnOpen.setOnClickListener(new View.OnClickListener() 
      

  8.   

    直接用new onclicklistener,上面已经说的很清楚了
      

  9.   

    你这段话里面总共只有一个引用btnOpen,所以肯定是这个引用是空的, 不信你可以在第一句后面用System.out.println(btnOpen)看看是不是null。目测你没有在findViewById之前调用 setContentView,或者你的xml文件有错误。
      

  10.   

    直接 贴 log啊 ,没图说个
      

  11.   


    package com.example.study;import android.support.v7.app.ActionBarActivity;
    import android.support.v7.app.ActionBar;
    import android.support.v4.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.os.Build;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.RadioGroup.OnCheckedChangeListener;
    import android.widget.Toast;
    import android.widget.ToggleButton;public class MainActivity extends ActionBarActivity { @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); if (savedInstanceState == null) {
    getSupportFragmentManager().beginTransaction()
    .add(R.id.container, new PlaceholderFragment()).commit();
    }
    Button btnOpen=(Button)MainActivity.this.findViewById(R.id.btnOpen);
    btnOpen.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //DisplayToast("You have Clicked the Open button");
        }
    });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    } @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
    return true;
    }
    return super.onOptionsItemSelected(item);
    } /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() {
    } @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main, container,
    false);
    return rootView;
    }
    }
    }
      

  12.   

    运行程序结果如下
    logcat日志如下
      

  13.   

    将下面代码注释
    if (savedInstanceState == null) {
    getSupportFragmentManager().beginTransaction()
    .add(R.id.container, new PlaceholderFragment()).commit();
    }
      

  14.   

    终于找到问题所在了,我新建项目的layout下有两个文件avtivity_main.xml和fragment_main.xml,(好像新版的ADT才会有两个文件)貌似这两个文件的都可以定义布局。
    我原来的id为btnOpen的按钮是定义在fragment_main.xml中,所以程序一直都报错,估计是找不到,后来我在activity_main.xml中也加入个id为btnOpen的按钮,就正常运行了。这又是我另外个一直没搞明白的问题,avtivity_main.xml和fragment_main.xml两个文件到底啥区别,我试着在两个文件中都加入元素,会重叠着在布局中显示。
      

  15.   

    if (savedInstanceState == null) {
    getSupportFragmentManager().beginTransaction()
    .add(R.id.container, new PlaceholderFragment()).commit();
    }你这里是不是继承了父类ActionBarActivity 的东西,造成的空指针啊,你把父类也贴出来看看呗
      

  16.   

    很显然,api 在通过id寻找你的控件的时候没找到,多看看源码你就懂了。
      

  17.   

    这个问题很简单Fragment需要一个布局,Activity也需要一个布局,在新版的ADT中给你生成的不只是Activity,还有Fragment因此会有两个布局。Fragment这个东西跟Activity有点像他有他自己的生命周期跟布局,这玩意在平板开发中用得比较多,在现在手机开发中用得也比较多。
      

  18.   


    那我在手机开发中定义布局一般还是用Fragment吗?但就会出现拥findViewById找不到控件的情况,如果用activity就能找到。
    不知道还有没有其他不一样的情况。
      

  19.   

    你是不是布局的XML中没有定义那个ID 
      

  20.   

    现在你有两个布局文件:
    activity_main.xml 和 fragment_main.xml.在MainActivity.java中执行Button btnOpen=(Button)findViewById(R.id.btnOpen) 这肯定btnOpen为null,因为此时findViewById是在activity_main.xml文件中找的,当然不存在。应改为:
    在PlaceholderFragment.java文件的onCreateView() 方法中 执行如下:
    Button btnOpen=(Button)rootView.findViewById(R.id.btnOpen);
    btnOpen.setOnClickListener(new View.OnClickListener(){
          ....
    });这样做findViewById是在rootView中找的。
      

  21.   


    你这就是坑爹,setcontent 用的布局里都没有那个控件,肯定报空指针啊
      

  22.   


    哦,原来如此,谢谢
    activity_main.xml 和 fragment_main.xml这两个布局文件主要区别是什么呢?我设计布局在哪个文件里比较好呢,还是说随便哪个都可以
      

  23.   


    找了下,src目录下只有MainActivity.java文件,没有PlaceholderFragment.java,请问这文件在哪个目录下呢
      

  24.   


    哦,原来如此,谢谢
    activity_main.xml 和 fragment_main.xml这两个布局文件主要区别是什么呢?我设计布局在哪个文件里比较好呢,还是说随便哪个都可以这
    你就没弄明白fragment怎么用、干什么用,百度下fragment用法吧!
      

  25.   


    找了下,src目录下只有MainActivity.java文件,没有PlaceholderFragment.java,请问这文件在哪个目录下呢
    com.example.study.MainActivity.java中的静态内部类PlaceholderFragment
      

  26.   


    那我在手机开发中定义布局一般还是用Fragment吗?但就会出现拥findViewById找不到控件的情况,如果用activity就能找到。
    不知道还有没有其他不一样的情况。
    楼主呀大哥呀,你在Activity在用findViewByID()查找的控件在fragment_main.xml中都没有定义当然会出错了
      

  27.   


    哦,原来如此,谢谢
    activity_main.xml 和 fragment_main.xml这两个布局文件主要区别是什么呢?我设计布局在哪个文件里比较好呢,还是说随便哪个都可以
    他们两其实没有区别呀
      

  28.   


    那我在手机开发中定义布局一般还是用Fragment吗?但就会出现拥findViewById找不到控件的情况,如果用activity就能找到。
    不知道还有没有其他不一样的情况。
    楼主呀大哥呀,你在Activity在用findViewByID()查找的控件在fragment_main.xml中都没有定义当然会出错了我尝试的结果是在fragment_main.xml中定义找不到,但在Activity_main.xml中定义能找到
      

  29.   


    哦,原来如此,谢谢
    activity_main.xml 和 fragment_main.xml这两个布局文件主要区别是什么呢?我设计布局在哪个文件里比较好呢,还是说随便哪个都可以这
    你就没弄明白fragment怎么用、干什么用,百度下fragment用法吧!坑爹的电子书,第一章完直接到第四章,第二章fragment的介绍我完全没看到,呵呵,买了纸质版的才明白,谢谢了,结贴啦