【问题标题】:Custom AlertDialog with EditText带有 EditText 的自定义 AlertDialog
【发布时间】:2018-04-19 16:54:36
【问题描述】:

我尝试开发一个小的 android 应用程序并显示一个对话框警报,其中只有一个编辑文本来填充自定义 作为下一个链接

Creating a custom layout 我有这个代码,但它不起作用

public class TraceDialogFragment extends DialogFragment {


TraceDialogListener mListener;

public interface TraceDialogListener {
    public void onDialogPositiveClick(DialogFragment dialog);
    public void onDialogNegativeClick(DialogFragment dialog);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();


    builder.setView(inflater.inflate(R.layout.activity_trace, null))
            .setIcon(R.drawable.ic_action_locate)
            .setTitle(R.string.trace_title)
            // Add action buttons
            .setPositiveButton(R.string.btn_ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    mListener.onDialogPositiveClick(TraceDialogFragment.this);
                }
            })
            .setNegativeButton(R.string.btn_cancel, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    mListener.onDialogNegativeClick(TraceDialogFragment.this);
                }
            });
    return builder.create();
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);

    try{
        mListener = (TraceDialogListener) context;
    }catch (ClassCastException e){
        throw new ClassCastException(context.toString() + " must implement TraceDialogListener");
    }
}

}

但代码在循环中运行

LayoutInflater inflater = getActivity().getLayoutInflater();

不明白

在我的课堂主要活动中

我有这个代码

class MainActivity extends AppCompatActivity implements TraceDialogFragment.TraceDialogListener

DialogFragment traceDialog = new TraceDialogFragment();
traceDialog.show(getSupportFragmentManager(),"TraceDialogFragment");

这是我的styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>

我的 logcat 是下一个

11-07 11:10:50.015 23570-23570/E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                            Process: , PID: 23570
                                                                                            java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
                                                                                                at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:359)

感谢您的帮助,

【问题讨论】:

  • 代码乍一看还不错。 “循环运行”是什么意思?应用程序会崩溃吗?如果是这样,请发布您的 logcat 输出。
  • 我有这个日志 java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this Activity。
  • 这个公共类MainActivity扩展了AppCompatActivity实现了TraceDialogFragment.TraceDialogListener
  • 如果我调试它停留在这 2 行然后返回去

标签: android android-layout android-fragments


【解决方案1】:

用editText试试这个AlertDialogue

  • 只需在您的Activity or Fragment 中调用此method Oncreate or OnCreateView

     public void inflateDialogue() {
        LayoutInflater layoutInflater=SelectUsers.this.getLayoutInflater();
        final View view = layoutInflater.inflate(R.layout.dialog_group_name, null);
        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle("Group_name");
    
        alertDialog.setCancelable(false);
    
        edt_groupName = (EditText) view.findViewById(R.id.edt_groupName);
    
        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                str_getTextFrom=edt_groupName.getText().toString();
                //here we have to call Database firebase
    
                dialog.dismiss();
    
            }
        });
        alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        alertDialog.setView(view);
        alertDialog.show();
    }
    

  • 在您的 xml 中创建 dialog_group_name

     <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/edt_groupName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:paddingLeft="@dimen/_10dp"
        android:paddingRight="@dimen/_10dp"
        android:textSize="@dimen/textSize"
        android:textColor="@color/colorPrimaryDark"
        android:textColorHint="@color/colorText"
        android:hint="@string/enter_groupName"
        android:inputType="textCapWords"
        android:singleLine="true"
        android:layout_marginTop="@dimen/_10dp"
        android:background="@null"
        android:maxLines="1"
        android:scrollbars="vertical" />
          </LinearLayout>
    

【讨论】:

    【解决方案2】:

    我通过更改命名空间解决了我的问题

    导入 android.support.v7.app.AlertDialog; 到 导入android.app.AlertDialog;

    我什么都不懂....但它有效

    【讨论】:

      猜你喜欢
      • 2022-02-04
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多