为啥 TextInputEditText 不能在 Android Studio 中转换为 TextInputLayout?
Posted
技术标签:
【中文标题】为啥 TextInputEditText 不能在 Android Studio 中转换为 TextInputLayout?【英文标题】:Why TextInputEditText cannot be cast to TextInputLayout in Android Studio?为什么 TextInputEditText 不能在 Android Studio 中转换为 TextInputLayout? 【发布时间】:2022-01-16 09:09:42 【问题描述】:所以基本上我遇到了转换错误,我尝试将 id 绑定到相同类型的小部件和类名。在 java 文件中,我已经使用 TextInputEditText 而不是 TextInputLayout 声明了变量并使用 TextInputEditText 进行了转换,但它没有'似乎不起作用。无论如何,这是我的活动代码:
public class Match extends AppCompatActivity
TextInputEditText nomstade,prix,date,nbreplace;
Button submitbutton;
DatabaseReference matchDBRef;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.creatematch);
nomstade = (TextInputEditText) findViewById(R.id.nomstade);
prix =(TextInputEditText)findViewById(R.id.prix);
submitbutton=findViewById(R.id.submitbutton);
matchDBRef= FirebaseDatabase.getInstance().getReference().child("Matchs");
submitbutton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
insertMatchData();
);
private void insertMatchData()
String Stade= nomstade.getText().toString();
String Prix= prix.getText().toString();
Matchs matchs= new Matchs(Stade,Prix);
matchDBRef.push().setValue(matchs);
Toast.makeText(Match.this,"Match created",Toast.LENGTH_SHORT).show();
其对应的XML代码为:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/nomstade"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_
android:layout_
android:layout_marginStart="32dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="32dp"
android:hint="Nom du stade"
app:boxBackgroundMode="outline"
app:boxCornerRadiusTopEnd="16dp"
app:hintTextColor="#56E07B"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
tools:ignore="DuplicateIds">
<com.google.android.material.textfield.TextInputEditText
android:layout_
android:layout_ />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/nbreplace"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_
android:layout_
android:layout_marginStart="32dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="32dp"
android:hint="Nombre de place"
app:boxBackgroundMode="outline"
app:boxCornerRadiusTopEnd="16dp"
app:hintTextColor="#56E07B"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/nomstade">
<com.google.android.material.textfield.TextInputEditText
android:layout_
android:layout_ />
</com.google.android.material.textfield.TextInputLayout>
所以基本上当我运行这段代码时,我得到了这个错误 java.lang.ClassCastException: com.google.android.material.textfield.TextInputLayout cannot be cast to com.google.android.material.textfield.TextInputEditText
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:那是因为它们是不同类型的不同项目。您不能将 Layout 类型转换为 EditText 类型。如果您想要TextInputEditText
,您应该为TextInputEditText
分配一个ID,并找到它而不是布局父ID。
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/nbreplace"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_
android:layout_
android:layout_marginStart="32dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="32dp"
android:hint="Nombre de place"
app:boxBackgroundMode="outline"
app:boxCornerRadiusTopEnd="16dp"
app:hintTextColor="#56E07B"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/nomstade">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/nbreplace_text
android:layout_
android:layout_ />
</com.google.android.material.textfield.TextInputLayout>
那你就可以了
nbreplace = (TextInputEditText) findViewById(R.id.nbreplace_text)
【讨论】:
以上是关于为啥 TextInputEditText 不能在 Android Studio 中转换为 TextInputLayout?的主要内容,如果未能解决你的问题,请参考以下文章
backgroundTint 属性为整个 TextInputEditText 着色
TextInputEditText - CompoundDrawable 未居中
TextInputLayout 和 TextInputEditText 的区别
TextInputLayout 和 TextInputEditText 的简单介绍以及使用
如何删除material.textfield.TextInputEditText(Material EditText)的边框