错误:
无法启动 Activity ComponentInfo{com.example.app/com.example.app.MainPermission}:java.lang.ClassCastException:android.widget.LinearLayout 无法转换为 android.widget.TextView
我尝试纠正,但我对该代码感到困惑:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainPermission">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#701198">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/sym" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Apply Permission"
android:textColor="@color/white" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/icon_id"
android:layout_width="wrap_content"
android:layout_height="15dp"
android:src="@drawable/sym" />
<TextView
android:id="@+id/txt_apply"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Apply Permission"
android:textColor="@android:color/white" />
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Date" />
<LinearLayout
android:id="@+id/txt_date"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="@drawable/border"
tools:ignore="ExtraText">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingStart="10dp"
android:text="Enter date" />
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:src="@drawable/atendance" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="3dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="From time">
</TextView>
<LinearLayout
android:id="@+id/txt_from_time"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="@drawable/border"
tools:ignore="DuplicateIds">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingStart="10dp"
android:text="Enter time" />
<ImageView
android:layout_width="25dp"
android:layout_height="20dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:src="@drawable/time"></ImageView>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="To Time"></TextView>
<LinearLayout
android:id="@+id/txt_to_time"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="@drawable/border">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingStart="10dp"
android:text="Enter time"></TextView>
<ImageView
android:layout_width="25dp"
android:layout_height="20dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:src="@drawable/time"></ImageView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Total Hours Taken" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="0 Hrs"
android:textColor="@color/black"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Description" />
<EditText
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginTop="10dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
活动类别:
import androidx.appcompat.app.AppCompatActivity;
public class MainPermission extends AppCompatActivity {
TextView Date_view, TxtFromTime, TxtToTime;
@SuppressLint("WrongViewCast")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_permission);
getSupportActionBar().hide();
Date_view = findViewById(R.id.txt_date);
TxtFromTime = findViewById(R.id.txt_from_time);
TxtToTime = findViewById(R.id.txt_to_time);
Date_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(MainPermission.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
calendar.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
String selectedDate = sdf.format(calendar.getTime());
Date_view.setText(selectedDate);
}
}, year, month, day);
datePickerDialog.show();
}
});
TxtFromTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(MainPermission.this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.getDefault());
String selectedTime = sdf.format(calendar.getTime());
TxtFromTime.setText(selectedTime);
}
}, hour, minute, true);
timePickerDialog.show();
}
});
TxtToTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(MainPermission.this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.getDefault());
String selectedTime = sdf.format(calendar.getTime());
TxtToTime.setText(selectedTime);
}
}, hour, minute, true);
timePickerDialog.show();
}
});
}
}
您正在尝试将
LinearLayout
分配给 TextView
属性。那是因为例如id txt_date
被分配给 xml 中的 LinearLayout
:
<LinearLayout
android:id="@+id/txt_date"
在这种情况下,您拥有的代码:
TextView Date_view, TxtFromTime, TxtToTime;
...
Date_view = findViewById(R.id.txt_date);
TxtFromTime = findViewById(R.id.txt_from_time);
TxtToTime = findViewById(R.id.txt_to_time);
几乎相当于这个:
// You can't cast LinearLayout to TextView - this code is wrong:
TextView Date_view = (LinearLayout) findViewById(R.id.txt_date);
TextView TxtFromTime = (LinearLayout) findViewById(R.id.txt_from_time);
TextView TxtToTime = (LinearLayout) findViewById(R.id.txt_to_time);
我希望你现在明白问题出在哪里。
此问题的快速解决方法是更改此行:
TextView Date_view, TxtFromTime, TxtToTime;
到这一行:
LinearLayout Date_view, TxtFromTime, TxtToTime;