从Activity中查找片段内的按钮

时间:2014-09-17 15:22:13

标签: android android-fragments

好吧所以我觉得这个问题应该在某处得到解答,但我找到的所有答案都无法解决我的问题。

我从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类的对象,因此不存在这样的方法。在生命周期中我可以放置代码,以确保视图已经膨胀了吗?

2 个答案:

答案 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方法,以确保在访问其子项之前已将其添加到活动中。但同样,如果可能的话,尝试将逻辑封装在片段中。