我是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;
> }
> }
>
> }
答案 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上添加按钮。