我有以下 Activity :
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new StartFragment())
.commit();
}
Button login = (Button) findViewById(R.id.loginButton);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(MainActivity.this,LoginActivity.class);
startActivity(intent);
}
});
}
当我尝试为 R.id.loginButton
调用 findViewByID
时,我收到 NPE,我猜这是因为 loginButton
位于一个单独的 fragment 中,我的 fragment 如下:
public static class StartFragment extends Fragment {
public StartFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main, container, false);
}
}
但是,我不确定如何解决此问题以便找到登录按钮 ID。我以前没有使用过 fragment ,所以我意识到我可能错误地使用它们/实现它们。 fragment_main
在 LinearLayout
中包含一些按钮,而 activity_main
只有一个 FrameLayout
。
最佳答案
尝试在Fragment
中实现您的onCreateView(...)
,例如
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
View something = rootView.findViewById(R.id.something);
something.setOnClickListener(new View.OnClickListener() { ... });
return rootView;
}
Button
位于 fragment 布局 (fragment_main.xml
) 中,而不位于 Activity 布局 (activity_main.xml
) 中。 onCreate()
处于生命周期的早期,无法在 Activity View 层次结构中找到它,并且返回 null
。在 null
上调用方法会导致 NPE。
关于java - 尝试 findViewById 时抛出 NullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23869019/