新建android4.4.2的项目,在res的layout目录下变成fragment_main.xml和activity_main.xml两个文件
在MainActivity中,重写的方法也多了,代码如下:
在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
这个是最新的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能否解决了,希望能帮到你。
所以获取btn的代码要写在
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
下面:
btn = (Button)rootView.findViewById(R.id.btn);
不知道lz能否解决了,希望能帮到你。