S'il vous plaît, informez-moi si vous savez quelle étiquette vous voulez.
Caused by: Java.lang.RuntimeException: view must have a tag
__BaseActivity.Java
@Override
public void setContentView(int layoutResID) {
mBinding.contentParent.removeAllViews();
DataBindingUtil.inflate(LayoutInflater.from(this), layoutResID, mBinding.contentParent, true);
super.setContentView(mBinding.getRoot());
}
__ChildActivity.Java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.my_wallet);
}
ERREUR logcat
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydev}: Java.lang.RuntimeException: view must have a tag
at <more...>
Caused by: Java.lang.RuntimeException: view must have a tag
at Android.databinding.DataBinderMapperImpl.getDataBinder(DataBinderMapperImpl.Java:121)
Cela se produit généralement lorsque vous essayez d'utiliser DataBindingUtil.inflate()
pour gonfler une disposition qui ne prend pas en charge la liaison de données. En d'autres termes, la disposition que vous essayez de gonfler n'a pas son élément racine comme <layout>
.
J'ai rencontré ce problème lors de la refactorisation d'un Activity pour utiliser la liaison de données, et le Activity a plusieurs dispositions. J'ai refactorisé avec succès l'une des dispositions pour inclure le <layout>
élément à sa racine, mais je n'ai pas refactorisé tout les autres dispositions (dispositions pour d'autres densités d'écran, langues, modules, etc.).
Vérifiez que [~ # ~] tous [~ # ~] les dispositions de correspondance possibles sont configurées avec <layout>
comme élément racine.
Voir ce doc développeur Layouts and binding expressions
AUCUNE idée, mais ça marche. ????
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.my_wallet, null, false);
setContentView(mBinding.getRoot());
}
OR
si votre disposition racine doit correspondre en tant que match_parrent pour la hauteur/largeur. comme https://github.com/umano/AndroidSlidingUpPanel
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.inflate(getLayoutInflater(), R.layout._activity_layout, null, false);
// TODO resolve this concurrent assignment
// tricky method because sliding layout must be as parent / high is HIGH_EXACT to MATCH_PARENT
setContentView(mBinding.getRoot(), new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}
Cela m'est arrivé en raison du fichier de mise en page de la bibliothèque (celui pour lequel l'erreur a été signalée) portant le même nom qu'un autre dans le module d'application. Les deux ont utilisé la liaison de données.
Un autre scénario où cette erreur se produit se trouve dans le ViewHolder d'un RecyclerView.
Évitez d'initialiser une instance de liaison dans la méthode de liaison de ViewHolder
class BindingAdapter(private val items: List<Any>): RecyclerView.Adapter<BindingHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindingHolder {}
override fun onBindViewHolder(holder: BindingHolder, position: Int) {
holder.bindItem(items[position])
}
}
class BindingHolder(view: View): RecyclerView.ViewHolder(view) {
fun bindItem(item: Any) {
//Don't do this
val binding = ItemSampleBinding.bind(itemView)
}
}
L'instance de liaison de données doit être initialisée en dehors de la méthode de liaison, car ViewHolders pourrait être recyclé et dans le code ci-dessus, nous pourrions essayer de créer une instance de liaison à partir d'une vue déjà liée.
Créez plutôt l'instance de liaison dans le bloc d'initialisation de ViewHolder (cela peut être dans init{}
bloquer ou juste après la déclaration de classe comme indiqué ci-dessous)
class BindingHolder(view: View): RecyclerView.ViewHolder(view) {
val binding = ItemSampleBinding.bind(view)
fun bindItem(item: Any) {
//Rest of ViewHolder logic
//binding.textView.text = "Something Nice"
}
}
cela m'est arrivé car une mise en page n'était pas présente pour toutes les résolutions (c'était seulement dans la mise en page et la mise en page normale).
Veuillez convertir la disposition XML en liaison de données. cela peut provoquer cette exception.
<layout>
xml components here...
</layout>
J'ai utilisé un gonfleur sans "attachToRoot". Cette erreur se produit toujours avec des problèmes liés au gonfleur dans l'adaptateur.
Cela se produit généralement lors de l'apprentissage de la liaison de données dans Android, nous utilisons généralement un main_activity.xml, puis incluons content_main.xml, mais nous avons par erreur mis la balise <layout
Dans le fichier de contenu. Nous devons mettre cette balise <layout
Et <data
Dans le fichier parent utilisé dans setContentView()