当前位置: 首页 > 知识库问答 >
问题:

RecyclerView inside AlertDialog未显示项目

储峻
2023-03-14

我试图在一个对话框中的recyclerView中显示数据,数据是从HTTP请求获取的。

我验证了适配器是否获得了数据——我在适配器中打印了数组长度,结果很好,但由于某些原因它不会显示数据——我所能看到的只是一个空白区域,recyclerView应该在那里。

重要提示:该应用程序运行良好,运行时没有错误或其他问题,回收器视图不存在。

final View dialogView = getLayoutInflater().inflate(R.layout.generate_question_dialog, null);
AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();
alertDialog.setView(dialogView);
alertDialog.show();
Button generateQuestionBtn = alertDialog.findViewById(R.id.generateQuestionBtn);
EditText subjectEditText = alertDialog.findViewById(R.id.subjectEditText);
ProgressBar loading = alertDialog.findViewById(R.id.generateProgressBar);
Objects.requireNonNull(generateQuestionBtn).setOnClickListener(view2 -> {
    if (!TextUtils.isEmpty(subjectEditText.getText().toString())){
        loading.setVisibility(View.VISIBLE);
        HttpUrl.Builder httpBuilder = HttpUrl.parse("ADDRESS").newBuilder();
        OkHttpClient okhttpclient = new OkHttpClient();
        okhttpclient.setReadTimeout(60, TimeUnit.SECONDS);
        httpBuilder.addQueryParameter("subject",subjectEditText.getText().toString());
        Request request = new Request.Builder().url(httpBuilder.build()).build();
        okhttpclient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
                System.out.println("FAILURE");
                System.out.println(e.getMessage());
            }

            @Override
            public void onResponse(Response response) throws IOException {
                String[] questions =  response.body().string().split(",");
                loading.setVisibility(View.INVISIBLE);
                QuestionsRecyclerViewAdapter adapter = new QuestionsRecyclerViewAdapter(getContext(),questions);
                new Handler(Looper.getMainLooper()).post(new Runnable(){
                    @Override
                    public void run() {
                        System.out.println("HERE!");
                        RecyclerView questionsRecyclerView = alertDialog.findViewById(R.id.generatedQuestionsRecyclerView);
                        questionsRecyclerView.setAdapter(adapter);
                        questionsRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
                        questionsRecyclerView.setVisibility(View.VISIBLE);
                    }
                });
            }
        });
    }

xmi文件:

<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="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="35dp"
        android:text="@string/enter_a_subject_and_we_ll_find_question_for_you"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/subjectEditText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:ems="10"
        android:hint="@string/enter_subject"
        android:inputType="textPersonName"
        android:minHeight="48dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <Button
        android:id="@+id/generateQuestionBtn"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20sp"
        android:text="@string/generate_question"
        android:textColor="@color/white"
        android:background="@drawable/button_bg"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/subjectEditText" />

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:paddingStart="185dp"
        android:layout_height="wrap_content"
        android:id="@+id/generatedQuestionsRecyclerView"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/generateQuestionBtn" />

    <ProgressBar
        android:id="@+id/generateProgressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="100dp"
        android:layout_height="80dp"
        android:visibility="invisible"
        android:indeterminateTint="@color/blue_p"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/generatedQuestionsRecyclerView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/generateQuestionBtn" />
</androidx.constraintlayout.widget.ConstraintLayout>

共有1个答案

夏新翰
2023-03-14

我认为你的对话框中没有足够的空间来容纳这些项目。对话框的大小将仅适合空的RecyclerView。将项目添加到RecyclerView时,内容大小会更改,但对话框不会调整大小以适应新的内容大小。您可以使用alertDialog。getWindow()。setLayout(WindowManager.LayoutParams.MATCH_父项,WindowManager.LayoutParams.MATCH_父项) 以增加对话框的大小。

如果这还不能解决问题,那么问题可能出现在问题RecycleServiceAdapter中。类或以显示项目的方式。

 类似资料:
  • 问题内容: 我将现有的项目源代码从SVN中检出到系统中的文件夹中。然后我打开了日食。导入项目->现有Maven项目。 它导入没有问题。但是,Project Explorer将其显示为仅文件夹而不是软件包。(就像我们创建一个包然后向其添加类时,它为包根显示一个不同的图标)。我也打开了Navigator和Package Explorer。但是他们也将它们显示为文件夹。 我试过了: 在项目的根源上。但这

  • 在一个应用程序屏幕上,我有许多EditText视图。我的应用程序是使用材料设计(AppCompactActivity等)构建的。 当显示一个EditText字段时,长按我会尝试选择文本中的一些单词。这允许我复制或共享该文本。选择一个以上的单词似乎是不可能的。 自从迁移到材质设计之后,我看到了两件事: 是的,我使用'android:textisselectable=“true”‘。您可以在下面看到E

  • 问题内容: 我正在学习使用Bootstrap并使用组件,尤其是导航栏。 我的链接/列表项未显示。我直接从Bootstrap复制了代码。我希望有人可以解释我所缺少的。 问题答案: 在 Bootstrap 4中 ,需要使用该类来显示水平导航栏,否则它将折叠成其移动状态。 或者 ,使用Codeply,它将为您提供所有相关的库:Codeply上的Bootstrap4 这是带有 Bootstrap 4.0.

  • 我正在尝试有一个使用IntelliJ GUI表单的UI。我创建了一个扩展JFrame的类,它只包含带有两个选项卡的JTabbedPane,每个选项卡都有一个JPanel。然后是扩展JPanel的2个其他类。但是,发射时没有面板显示。 我已经尝试使面板失效,重新涂漆和重新验证

  • 我直接从书上抄了这些例子。代码应该在JFrame上绘制一些东西,但没有显示任何东西(除了JFrame),这里是带有main方法的类 下面是JPanel的一个子类

  • 我试图在应用程序启动时显示项目的listview。但在应用程序启动时,没有显示listview,只有一个空白屏幕。下面是代码: MainActivity.java 但是现在我在logcat中得到了以下内容: 并且应用程序停止..请帮助!