问题描述
我试图创建一个输入弹出对话框,我可以从任何活动中调用该对话框,并且该对话框必须将输入返回给被调用的活动。
我的片段通话
FragmentManager manager = getSupportFragmentManager();
InputDialog inputDialog = new InputDialog();
Bundle bundle = new Bundle();
bundle.putString("header","Enter new Name");
bundle.putString("hint","NAME");
bundle.putInt("type",InputType.TYPE_CLASS_TEXT);
bundle.putString("negative","Cancel");
bundle.putString("positive","Update");
inputDialog.setArguments(bundle);
inputDialog.show(manager,"frag_input_name");
我的DialogFragment类
public class InputDialog extends DialogFragment
{
private TextView tvHeader;
private EditText etInput;
private Button buttPositive,buttNegative;
private String header,hint,negative,positive,input;
private Integer type;
public interface InputDialogListener
{
void onFinishInputDialog(String input);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.dialog_input,container,false);
tvHeader = view.findViewById(R.id.inputdiag_tv_header);
etInput = view.findViewById(R.id.inputdiag_et_input);
buttNegative = view.findViewById(R.id.inputdiag_button_negative);
buttPositive = view.findViewById(R.id.inputdiag_button_positive);
header = getArguments().getString("header");
hint = getArguments().getString("hint");
type = getArguments().getInt("type",InputType.TYPE_CLASS_TEXT);
negative = getArguments().getString("negative");
positive = getArguments().getString("positive");
tvHeader.setText(header);
etInput.setHint(hint);
etInput.setInputType(type);
buttNegative.setText(negative);
buttPositive.setText(positive);
buttNegative.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
InputDialog.this.dismiss();
}
});
buttPositive.setonClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
input = etInput.getText().toString().trim();
if(isInputValid(input))
{
InputDialogListener activity = (InputDialogListener) getActivity();
activity.onFinishInputDialog(input);
InputDialog.this.dismiss();
}
else
{
etInput.setError("Invalid Input");
}
}
});
getDialog().getwindow().setSoftInputMode(WindowManager.LayoutParams.soFT_INPUT_STATE_VISIBLE);
return view;
}
private Boolean isInputValid(String input)
{
switch (type)
{
case InputType.TYPE_CLASS_TEXT: return isTextValid(input);
case InputType.TYPE_CLASS_PHONE: return isPhoneValid(input);
default: return false;
}
}
private Boolean isTextValid(String input)
{
return input != null && input.trim().length() > 0;
}
private Boolean isPhoneValid(String input)
{
return Pattern.matches("[0-9]{10}",input);
}
}
我的对话框xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="5dp">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:elevation="5dp"
app:cardCornerRadius="5dp"
app:cardElevation="5dp"
app:cardMaxElevation="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/inputdiag_tv_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:text="@string/Test"
android:textAlignment="center"
android:textColor="@color/colorNFN"
android:textSize="28sp"
app:layout_constraintBottom_toTopOf="@+id/inputdiag_et_input"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/inputdiag_et_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@drawable/rounded_corner"
android:ems="10"
android:hint="@string/Test"
android:importantForAutofill="no"
android:inputType="textPersonName"
android:paddingVertical="4dp"
android:singleLine="true"
android:textAlignment="center"
android:textColor="@color/colorNFN"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/inputdiag_tv_header" />
<Button
android:id="@+id/inputdiag_button_negative"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_marginBottom="20dp"
android:text="@string/Test"
android:textColor="@color/colorNFN"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/inputdiag_button_positive"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/inputdiag_et_input" />
<Button
android:id="@+id/inputdiag_button_positive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorNFN"
android:text="@string/Test"
android:textColor="@color/LightGrey"
app:layout_constraintBottom_toBottomOf="@+id/inputdiag_button_negative"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/inputdiag_button_negative"
app:layout_constraintTop_toTopOf="@+id/inputdiag_button_negative" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
代码工作正常,没有崩溃。 调用该片段时,背景变暗,但不显示对话框。 附注:我是Android应用程序开发的新手,因此请以简单的方式进行解释。 我一直在遵循this教程,但是我已经将对话框设计更改为我自己定制的一些内容。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)