零点处理

时间:2014-06-21 11:50:41

标签: android

我是Android应用程序开发的新手。在开发我的第一个应用程序时,我在button1.setonClickListener()处发现了零点异常。我可以初始化为变量类型Button以避免零点异常。  package com.example.first;

 public class MainActivity extends ActionBarActivity { 
 private Button
> btn1;
> 
> private ImageView imagetoshow;
>     @Override
>     protected void onCreate(Bundle savedInstanceState) {
>         super.onCreate(savedInstanceState);
>         setContentView(R.layout.activity_main);
>         
>         btn1=(Button)findViewById(R.id.button1);
>          
>           imagetoshow=(ImageView)findViewById(R.id.imageView1);
>        
>         if(btn1!=null){       btn1.setOnClickListener(new View.OnClickListener() {
>               @Override
>               public void onClick(View v) {
>               
>             imagetoshow.setImageResource(R.drawable.image1);
>                   
>               }
>             }); }
>      
>         if (savedInstanceState == null) {
>             getSupportFragmentManager().beginTransaction()
>                     .add(R.id.container, new PlaceholderFragment())
>                     .commit();
>         }
>     }
> 
> 
>       @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;
>         }
>     }
> 
>    }

3 个答案:

答案 0 :(得分:0)

在尝试调用该对象上的方法之前,您应该检查button1是否为null,如:

if(button1 != null) {
    button1.setonClickListener()
}

但我想知道为什么按钮为空?你的代码肯定有问题......

答案 1 :(得分:0)

嗯,你需要通过从xml获取它来初始化它:

button1 = (Button) findViewById(R.id.myButton);

或者通过创建新的Object手动初始化它(但您还需要将其作为子项添加到ViewGroup

button1 = new Button(this);
parentLayout.addView(button1);

对于大多数动态生成内容的用例,我强烈建议使用第一个选项。

- 编辑 -

根据您的代码判断,我只能用id' button1'来结束按钮。不在activity_main.xml文件中。您只能使用已设置为内容视图的布局文件中定义的Views。您应该在activity_main.xml中定义按钮,将内容视图更改为正确的布局文件。

- 编辑 -

似乎你想在片段中使用Button。然后,您应该在Fragment(在代码中称为PlaceholderFragment)内部初始化Button:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_main,
                container, false);
                button1 = (Button) v.findViewById(R.id.button1);
        return v;
}

答案 2 :(得分:0)

根据我的猜测。因为你没有发布你的xml文件。

我可以给你一些建议。

       public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) 
      {
                View v = inflater.inflate(R.layout.fragment_main,
                        container, false);
                            button1 = (Button) v.findViewById(R.id.button1);


button1.setOnClickListner(new View.OnClickListener() 
    {
                   @Override
                   public void onClick(View v)
                  {

                    imagetoshow.setImageResource(R.drawable.image1);

                   }
                 });
    }

            return v;
    }

第二个建议

如果您不想使用片段概念而不是使用活动进行扩展。并删除所有额外的代码并更改xml文件,在activity_main.xml上添加按钮。