Android 零点处理
我是android应用程序开发新手。在开发我的第一个应用程序时,我在button1.setonClickListener发现了空点异常。我可以初始化什么值为变量类型Button以避免空点异常。 包com.example.firstAndroid 零点处理,android,Android,我是android应用程序开发新手。在开发我的第一个应用程序时,我在button1.setonClickListener发现了空点异常。我可以初始化什么值为变量类型Button以避免空点异常。 包com.example.first public class MainActivity extends ActionBarActivity { private Button > btn1; > > private ImageView imagetoshow; >
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;
> }
> }
>
> }
在尝试调用该对象上的方法之前,应该检查button1是否为null,如:
if(button1 != null) {
button1.setonClickListener()
}
但我想知道为什么按钮是空的?您的代码一定有问题…好吧,您需要通过以下方式从xml获取代码来初始化它:
button1 = (Button) findViewById(R.id.myButton);
或者通过创建一个新对象手动初始化它,但随后还需要将其作为子对象添加到视图组中
我强烈推荐第一个选项用于大多数不动态生成内容的用例
-编辑-
从代码判断,我只能断定id为“button1”的按钮不在activity_main.xml文件中。只能使用已设置为内容视图的布局文件中定义的视图。您应该在将内容视图更改为正确布局文件的activity_main.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);
return v;
}
据我猜测。因为您没有post 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上添加按钮 发布您的LogCat错误和代码请发布您的代码和LogCat例外我认为您没有在活动的xml上找到按钮1。请查看该链接了解更多信息。大多数情况下,您可以非常确定该按钮不是空的。如果为空,则它将始终为空。因此,如果您需要检查,它将始终失败,并且按钮将永远无法单击。大多数时间并不意味着总是,这就是我们进行检查的原因,或者我们确定代码中发生了什么。@vamshi请查看我的答案,您需要初始化它。@xwid我的意思是所有时间。如果您初始化一个对象,它将不会为null,除非您做了错误的事情。您应该修复错误,而不是捕获错误。有些用例中,一个对象有时只是空的,但不是这个。但我的相对布局在fragment_main.xml中,框架布局在activity_main.xml中,我在fragment_main.xml中定义了按钮这是你的问题。这是不可能的。如果使用findViewById查找视图,则需要将该按钮添加到setContentView中定义的视图中。但听起来你想使用片段中的按钮。然后,您应该在Fragment类中设置OnCLickListener。我在哪里可以找到Fragment类?我在哪里可以找到Fragment类?可能在src中的包中。根据您发布的代码判断,它被称为占位符碎片。请告诉我,默认情况下,如何在activity_main.xml中设置相对布局?因为我不知道片段的概念。请帮助我,因为我一直在试图在布局中创建新的.xml。您将获得布局选项选择相对布局。无论何时创建新项目,您都会在新的adt eclipse中找到片段概念。。但在您的项目中不需要它,只需将其删除即可。。所有不需要的方法、随活动扩展、删除框架并在Activity_main.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;
}