我已经查看了stackoverflow上这个新手android问题的答案,但我无法理解最佳解决方案是什么。
我正在尝试创建一个包含几个文本字段和一个按钮的简单活动(带有一个片段)。按下按钮时,我希望按钮能够做某事!
所以我有我的mainActivity类及其代码片段。我正在尝试正确设置" onClickListener"到我的按钮对象。
当我在" onCreate"在活动本身的方法中,它会抛出一个nullpointerexception - 我猜测这是因为按钮本身尚未创建。但是,将此代码放在OnStart方法中会导致它被反复调用并且看起来不合适。
所以我把它移到了"占位符片段" - 它不再被报告为null,但我无法使用意图导航到另一个页面(因为其他页面不是静态的,我不能使用&#34来引用当前活动;这个")。
我很困惑,看起来很简单。
场景#1:尝试在OnCreate方法中启动它(:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_made_my_day);
////////////////////// PROBLEM IS HERE //////////////////////////////////
Button butLogin = (Button) findViewById(R.id.but_login);
butLogin.setOnClickListener(butLogin_OnClickListener);
///////////
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
版本2 - 片段代码,也不起作用:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_made_my_day, container, false);
Button butLogin = (Button) rootView.findViewById(R.id.but_login);
butLogin.setOnClickListener(butLogin_OnClickListener);
return rootView;
}
答案 0 :(得分:2)
首先,您可以通过调用getActivity()
来引用片段中的活动(在附加之后)。这应该足以启动意图。例如:
Intent intent = new Intent(getActivity(), ActivityToCall.class);
getActivity().startActivity(intent);
其次,but_login
按钮实际位于activity_made_my_day.xml
还是fragment_made_my_day.xml
?根据具体情况,您可以使用findViewById()
(活动或片段)。