4

作为 Android Dev 的新手,我很难把这些点联系起来。我经常被困在如何从不同的片段、活动、类中获取特定的 id ——无论哪个。

例如。

我有一个DialogFragment包含一个EditText字段。我想在该字段中添加文本,然后单击将该字符串发送到ListViewparent 中的a FragmentActivity

这是FragmentActivitywhere 的代码ListView

public class NewActivity extends FragmentActivity implements AddSiteDialog.AddSiteClick {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.add_site);


    Button b = (Button) findViewById(R.id.addSiteButton);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog();
        }
    });

    ListView siteListView = (ListView) findViewById(R.id.siteList);


}

public void showDialog() {

    DialogFragment newFragment = new AddSiteDialog();
    newFragment.show(getSupportFragmentManager(), "Dialog");

}

public void onSignIn(DialogFragment dialog) {

}

}

这里是生活的DialogFragment地方EditText

public class AddSiteDialog extends DialogFragment {

public interface AddSiteClick {
    public void onSignIn(DialogFragment dialog);
}
AddSiteClick addSiteClick;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    Rect displayRectangle = new Rect();
    Window window = getDialog().getWindow();

    getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
    window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

    LayoutInflater layoutInflater = getActivity().getLayoutInflater();

    final View view;
    view = layoutInflater.inflate(R.layout.main, null);

    view.setMinimumWidth((int) (displayRectangle.width() * 0.95f));
    view.setMinimumHeight((int) (displayRectangle.height() * 0.88f));

    final EditText editText = (EditText) view.findViewById(R.id.siteEditText);

    editText.setHint("Enter URL");

    editText.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            editText.setCursorVisible(true);
            editText.setHint("");
           }
    });

    ((Button) view.findViewById(R.id.sign_in_button)).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            addSiteClick.onSignIn(AddSiteDialog.this);
        }
    });

    ((Button) view.findViewById(R.id.cancel_button)).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            getDialog().dismiss();

        }
    });
    return view;
}

对事物如何相互通信的一个很好的解释将是一个很大的帮助。这个特定任务如何协同工作的代码示例也很棒。

提前致谢!

4

1 回答 1

4

理想情况下,活动不需要知道任何有关 Fragment 实现方式的具体信息。出于这个原因,片段/活动的通信方式是通过接口和片段的公共方法。所有这些都在开发人员指南的本节中介绍

简而言之,您将在对话框中使用单个方法(例如 onUserDataEntered)定义一个接口,并在 Activity 上实现它。当用户单击对话框中的按钮时,调用onUserDataEntered(theData).

于 2013-02-11T22:35:45.280 回答