【问题标题】:Communicating between DialogFragment and FragmentActivity in AndroidAndroid中DialogFragment和FragmentActivity之间的通信
【发布时间】:2013-02-11 22:18:39
【问题描述】:

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

例如。

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

这是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;
}

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 2015-12-29
      • 2015-03-20
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多