作为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;
}
对事物如何相互沟通的一个很好的解释将是一个很大的帮助。这个特定任务如何协同工作的代码示例也很棒。
提前致谢!
答案 0 :(得分:3)
理想情况下,活动不需要知道有关Fragment实现方式的任何具体信息。出于这个原因,片段/活动的通信方式是通过接口和Fragment的公共方法。所有这些都包含在this section of the developer guide中。
简而言之,您可以使用单个方法(例如onUserDataEntered)在对话框中定义一个接口,并在Activity上实现它。当用户单击对话框中的按钮时,调用onUserDataEntered(theData)
。