好吧所以我觉得这个问题应该在某处得到解答,但我找到的所有答案都无法解决我的问题。
我从eclipse菜单创建了一个新的android Activity
,并添加了一个使用Fragment
xml布局的新Activity。在xml中有一个EditText
和一个Button
,当点击按钮时,我想使用EditText中的String
进行somoething:
Button b = (Button)findViewById(R.id.syncButton));
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText e = (EditText)(findViewById(R.id.syncCode));
Log.d("You entered", e.getText().toString());
}
});
如果我将代码放在onCreate()
中,我会得到NullpointerException
,因为视图尚未创建。我已经看到使用方法onActivityCreated
的解决方案,但由于我使用的是Activity类的对象,因此不存在这样的方法。在生命周期中我可以放置代码,以确保视图已经膨胀了吗?
答案 0 :(得分:0)
把它放在你的碎片中:
private Button mButton;
private EditText mEditText;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_main, container, false);
mButton = (Button) findViewById(R.id.sync_button));
mEditText = (EditText) findViewById(R.id.sync_code);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "You entered: " + mEditText.getText());
}
});
return rootView;
}
答案 1 :(得分:0)
我认为响应来自包含活动的事件将减少片段重用度,如果可能的话,你应该尽可能地使片段成为原子和自包含的,这样你就可以在几个活动中使用它们。
无论如何,使用onCreateView事件。像这样:
rootView = inflater.inflate(R.layout.fragment_sms, container, false);
txtBody = (TextView) rootView.findViewById(R.id.txtContrl);
此外,您可以使用片段的.isAdded
方法,以确保在访问其子项之前已将其添加到活动中。但同样,如果可能的话,尝试将逻辑封装在片段中。