android4.4初始化组件问题,空指针异常

移动开发 码拜 8年前 (2016-05-11) 1288次浏览
新建android4.4.2的项目,在res的layout目录下变成fragment_main.xml和activity_main.xml两个文件
在MainActivity中,重写的方法也多了,代码如下:

public class MainActivity extends ActionBarActivity {

	/**
	 * 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;
		}
	}

	Button btn = null;
	@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();
		}


	}
	@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);
	}
}

现在本人遇到一个问题,就是本人在onCreate的方法下初始化fragment_main.xml文件下的Button组件会报空指针异常
就写在setContentView(R.layout.activity_main);下面。

	btn = (Button)findViewById(R.id.btn);
	btn.setOnClickListener(new OnClickListener(){
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "点击了按钮", Toast.LENGTH_LONG);
		}

	});

假如本人换一下btn = (Button)findViewById(R.id.btn);的位置,换到super.onCreate(savedInstanceState);前面,就会报:
requestFeature() must be called before adding content的错误。
这是为什么?本人初始化组件的位置应该写在哪?求指导~~~

解决方案

30

不知道lz问题解决了没有,本人没有部署你的代码,本人用的是4.4,不用ActionBarActivity了,但本人应该知道题主说的空指针问题所在了

setContentView(R.layout.activity_main);
         
        btn = (Button)findViewById(R.id.btn);

在onCreate方法中你给ActionBarActivity设置的布局文件是activity_main,而按钮不是在这个布局文件中的,所以这里是拿不到的,还有一点你用了Fragment,这个是在Android3增加的,而你的AndroidManifest.xml文件中的:

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

应该是minSdkVersion = “11”,
找到问题所在,lz可以本人尝试去修改这种实现,在别的地方去获取这个Button,例如说在Fragment中初始化,但是注意调用顺序,不知道lz能否帮助lz解决问题。

5

引用:
Quote: 引用:

不知道lz问题解决了没有,本人没有部署你的代码,本人用的是4.4,不用ActionBarActivity了,但本人应该知道题主说的空指针问题所在了

setContentView(R.layout.activity_main);
         
        btn = (Button)findViewById(R.id.btn);

在onCreate方法中你给ActionBarActivity设置的布局文件是activity_main,而按钮不是在这个布局文件中的,所以这里是拿不到的,还有一点你用了Fragment,这个是在Android3增加的,而你的AndroidManifest.xml文件中的:

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

应该是minSdkVersion = “11”,
找到问题所在,lz可以本人尝试去修改这种实现,在别的地方去获取这个Button,例如说在Fragment中初始化,但是注意调用顺序,不知道lz能否帮助lz解决问题。

高手,一语中的~求指点,本人想知道需要了解哪些部分的知识可以让本人理解这个调用顺序的问题。问题确实如你所说,本人就是不清楚配置文件和布局文件以及MainActivity的调用顺序。还有就是怎样建立项目可以不会继承ActionBarActivity,以前建立项目的时候继承的不是这个类是Activity,也没有两个布局文件。现在有两个是为什么?

这个是最新的ADT修改的地方,之前的版本默认构建的Android项目的Activity是继承Activity的,也没有搞的这么复杂,这块本人还没有更新,没有这么做过,比较快的方法时建议lz用最新版之前一个版本的sdk和adt,或手动修改Activity,希望对你有帮助~

5

这样肯定会报错啊。   原因是btn是在fragment_main.xml里面的  ,但你在setContentView(R.layout.activity_main);的下面获取btn,由于activity_main.xml只有一个FrameLayout布局。
所以获取btn的代码要写在
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
下面:
btn = (Button)rootView.findViewById(R.id.btn);
不知道lz能否解决了,希望能帮到你。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明android4.4初始化组件问题,空指针异常
喜欢 (0)
[1034331897@qq.com]
分享 (0)