【问题标题】:Circular Progress Bar in Alert Dialog Not Showing警报对话框中的圆形进度条不显示
【发布时间】:2020-06-12 15:34:36
【问题描述】:

我正在为我的警报对话框使用自定义布局。布局包含一个 ProgressBar 和一个 TextView。我想要一个不断旋转的圆形进度条。 TextView 可见,但 ProgressBar 不可见。

processing_dialog.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"
    >

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="70dp"
        android:layout_height="70dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.04"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        ></ProgressBar>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textColor="#000000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.13"
        app:layout_constraintStart_toEndOf="@+id/progressBar"
        app:layout_constraintTop_toTopOf="parent"
        android:id="@+id/processing_message"></TextView>
</androidx.constraintlayout.widget.ConstraintLayout>

ProcessingDialog.java

public class ProcessingDialog extends DialogFragment {

    private String messageToShow;
    private Dialog dialog;
    private Context context;
    private Activity activity;

    ProcessingDialog(String message, Activity activity){
        messageToShow = message;
        this.activity = activity;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstance){
        AlertDialog.Builder builder = new AlertDialog.Builder(activity);

        LayoutInflater inflater = activity.getLayoutInflater();
        View v = inflater.inflate(R.layout.processing_dialog,null);
        ((TextView)v.findViewById(R.id.processing_message)).setText(messageToShow);
        builder.setView(v);
        dialog = builder.create();
        return dialog;
    }
}

ViewDataActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_data_activity);
        initView();
        dialog = new ProcessingDialog("Processing...", ViewDataActivity.this).onCreateDialog(savedInstanceState);
        dialog.show();
        DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
        ref.addValueEventListener(valueEventListener);
    }

【问题讨论】:

    标签: android dialog


    【解决方案1】:

    首先,您的设备模拟器中是否启用了动画?如果没有,请检查开发者模式中的选项。

    其次,按照 android 文档 Dialogs | Android Developers,我建议进行以下更改:

    ProcessingDialog.java

    @Override
    public Dialog onCreateDialog(Bundle savedInstance){
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        ...
        builder.setView(v);
        return builder.create();
    }
    

    ViewDataActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        dialog = new ProcessingDialog("Processing...", ViewDataActivity.this);
        dialog.setArguments(savedInstanceState);
        dialog.show(getSupportFragmentManager(), "MY_TAG");
        ...
    }
    

    另外,不需要将活动作为参数传递;getActivity() 应该可以处理。

    【讨论】:

    • getActivity() 抛出 NullPointerException。这就是我通过 Activity 的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多