19j5069
@19j5069

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[Android Studio]実行時エラー(Code問題なし)

解決したいこと

Android Studio(Java)でアプリケーションを作成しています。
コード自体にエラーはないのですが、実行時にすぐにアプリが落ちてしまいます。

LogCatに実行時のエラーがあります。が、androidx.constraintlayout.widget.ConstraintLayout をandroid.widget.LinearLayout としてキャストしようとしていることによるエラーと出ていましたが、xmlファイルではLinearLayoutは一切使っていません。

解決方法を教えて下さい。

発生している問題・エラー

FATAL EXCEPTION: main
Process: com.example.testapplication, PID: 15753
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testapplication/com.example.testapplication.MainActivity}:
java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.LinearLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.ClassCastException:
	androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.LinearLayout
at com.example.testapplication.MainActivity.onCreate(MainActivity.java:41)
at android.app.Activity.performCreate(Activity.java:7802)
at android.app.Activity.performCreate(Activity.java:7791)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)

該当するソースコード

package com.example.testapplication;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

import java.util.Date;
public class MainActivity extends AppCompatActivity {
    private View newTopBar;
    private LinearLayout buttonLayout;
    private ScrollView scrollView;
    //private View recyclerViewContainer;
    @SuppressLint("SetTextI18n")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        ConstraintLayout contentLayout = findViewById(R.id.contentLayout);

        Button button1 = findViewById(R.id.button1);
        Button button2 = findViewById(R.id.button2);
        Button button3 = findViewById(R.id.button3);
        Button button4 = findViewById(R.id.button4);
        Button button5 = findViewById(R.id.button5);
        newTopBar = findViewById(R.id.newTopBar);

        buttonLayout = findViewById(R.id.buttonLayout);
        scrollView = findViewById(R.id.scrollView);

        button1.setOnClickListener(v -> {
            if (newTopBar.getVisibility() == View.INVISIBLE) {
                newTopBar.setVisibility(View.VISIBLE);

                int newTopBarWidth = newTopBar.getWidth();

                buttonLayout.setTranslationX(newTopBarWidth);

                int buttonWidth = buttonLayout.getLayoutParams().width - newTopBarWidth;
                for (Button button : Arrays.asList(button1, button2, button3, button4, button5)) {
                    button.getLayoutParams().width = buttonWidth;
                    button.requestLayout();
                }

                scrollView.setTranslationX(newTopBarWidth);
            } else {
                newTopBar.setVisibility(View.INVISIBLE);
                buttonLayout.setTranslationX(0);
                int buttonWidth = buttonLayout.getLayoutParams().width + newTopBar.getWidth();
                for (Button button : Arrays.asList(button1, button2, button3, button4, button5)) {
                    button.getLayoutParams().width = buttonWidth;
                    button.requestLayout();
                }

                scrollView.setTranslationX(0);
            }
        });
        List<TodoItem> todoItems = new ArrayList<>();
        todoItems.add(new TodoItem("Buy groceries", "Milk, eggs, bread", new Date()));
        todoItems.add(new TodoItem("Finish project", "Complete documentation", new Date()));
        ScrollView scrollView = findViewById(R.id.scrollView);
        scrollView.post(() -> scrollView.fullScroll(ScrollView.FOCUS_UP));

        TodoItemAdapter adapter = new TodoItemAdapter(todoItems);
        recyclerView.setAdapter(adapter);
        for (TodoItem item : todoItems) {
            TextView textView = new TextView(this);
            textView.setText(item.getTitle() + ": " + item.getDescription());
            contentLayout.addView(textView);
        }
    }
}

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <View
        android:id="@+id/topBar"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#571729" />

    <View
        android:id="@+id/newTopBar"
        android:layout_height="match_parent"
        android:layout_width="60dp"
        android:layout_below="@id/topBar"
        android:background="#FF5733"
        android:visibility="invisible" />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/buttonLayout"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_below="@id/topBar">

        <Button
            android:id="@+id/button1"
            style="@style/Widget.AppCompat.Button.Colored"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:text="@string/button_text_1"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_weight="1" />

        <Button
            android:id="@+id/button2"
            style="@style/Widget.AppCompat.Button.Colored"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:text="@string/button_text_2"
            app:layout_constraintStart_toEndOf="@+id/button1"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_weight="1" />

        <Button
            android:id="@+id/button3"
            style="@style/Widget.AppCompat.Button.Colored"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:text="@string/button_text_3"
            app:layout_constraintStart_toEndOf="@+id/button2"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_weight="1" />

        <Button
            android:id="@+id/button4"
            style="@style/Widget.AppCompat.Button.Colored"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:text="@string/button_text_4"
            app:layout_constraintStart_toEndOf="@+id/button3"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_weight="1" />

        <Button
            android:id="@+id/button5"
            style="@style/Widget.AppCompat.Button.Colored"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:text="@string/button_text_5"
            app:layout_constraintStart_toEndOf="@+id/button4"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_weight="1" />

    </androidx.constraintlayout.widget.ConstraintLayout>
    <!-- スクロール可能なコンテンツを配置するスクロールビュー -->
    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/buttonLayout"
        android:layout_marginTop="0dp">
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/contentLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="0dp"
            android:orientation="vertical">
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                app:layout_constraintTop_toBottomOf="@id/contentLayout"
                app:layout_constraintBottom_toBottomOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </ScrollView>
</RelativeLayout>

自分で試したこと

元々LinearLayoutで構成していた部分を、より動的な挙動を持たせたいと思いConstraintLayoutに書き換えました。
なので、キャッシュの問題だと思い、自分ではCleanとRebuildを行いましたが、変わりませんでした。
エミュレータのデバイスは、接続されない別のエラーがあったので一度消してもう一度入れました。

0

2Answer

LogCatに実行時のエラーがあります。が、androidx.constraintlayout.widget.ConstraintLayout をandroid.widget.LinearLayout としてキャストしようとしていることによるエラーと出ていましたが、xmlファイルではLinearLayoutは一切使っていません。

コード抜粋
private LinearLayout buttonLayout;
...
buttonLayout = findViewById(R.id.buttonLayout);

buttonLayoutがLinearLayoutで宣言されているので、キャストエラーになってるように見えますが、どうでしょうか?

0Like

Your answer might help someone💌