[Android Studio]実行時エラー(Code問題なし)
Q&A
Closed
解決したいこと
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