在Android中的DialogFragment和FragmentActivity之间进行通信

时间:2013-02-11 22:18:39

标签: android android-listview android-dialog android-fragmentactivity android-dialogfragment

作为Android Dev的新手,我很难连接点。我常常被困在如何从不同的片段,活动,类中获取特定的id - 无论哪个。

例如。

我的DialogFragment包含EditText字段。我想在该字段中添加文字,然后点击将该字符串发送到父ListView中的FragmentActivity

以下是FragmentActivity所在的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;
}

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

提前致谢!

1 个答案:

答案 0 :(得分:3)

理想情况下,活动不需要知道有关Fragment实现方式的任何具体信息。出于这个原因,片段/活动的通信方式是通过接口和Fragment的公共方法。所有这些都包含在this section of the developer guide中。

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