【发布时间】:2016-09-24 02:07:19
【问题描述】:
我正在尝试实现一个显示 DialogFragment 的自定义 LinearLayout。我做了所有的事情,效果很好,对话框显示和工作完美,但我似乎无法从 DialogFragment 获取数据。
所以我创建了一个界面:
public interface DialogCommunicator {void onDismiss(String format, String data);}
在 LinearLayout 上,我实现了 DialogCommunicator 接口并做到了这一点:
public class CustomLayout extends LinearLayout implements DialogCommunicator, View.OnClickListener {
Button showDialog;
TextView displayUserInput;
CreateDialog dialog;
public CustomLayout(Context context) {
super(context);
}
public CustomLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
showDialog = (Button) findViewById(R.id.showDialog);
displayUserInput = (TextView) findViewById(R.id.displayUserInput);
showDialog.setOnClickListener(this);
}
@Override
public void onDismiss(String format, String data) {
dialog.dismiss();
someMethod(format, data);
}
private void someMethod(String format, String data) {
displayUserInput.setText(format + data);
}
@Override
public void onClick(View v) {
AppCompatActivity activity = (AppCompatActivity) getContext();
dialog = new CreateDialog();
dialog.show(activity.getSupportFragmentManager(), "Mydialog");
}}
在 DialogFragment 上我这样做了,但活动始终为空:
public class CreateDialog extends DialogFragment implements DialogCommunicator, View.OnClickListener {
View view;
String format, data;
Button create;
EditText userFormat, userData;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.create_barcode, container);
userFormat = (EditText) view.findViewById(R.id.userFormat);
userData = (EditText) view.findViewById(R.id.userData);
create = (Button) view.findViewById(R.id.create);
create.setOnClickListener(this);
return view;
}
@Override
public void onDismiss(String format, String data) {
RTToolbarHorizontalLayout layout = (RTToolbarHorizontalLayout) getHost();
if (layout != null) {
layout.onDismiss(format, data);
}
}
@Override
public void onClick(View v) {
format = userFormat.getText().toString();
data = userData.getText().toString();
onDismiss(format, data);
}
}
我尝试过getContext()、getDialog()、getHost(),但它们都是空的。
【问题讨论】:
-
能把代码全部加进去,会更清楚
-
我已经添加了整个班级。
标签: android android-linearlayout android-dialogfragment