Ajouter un layout lors d'un click

Résolu
lamouchetsetse Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   -  
lamouchetsetse Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous, étant débutant sur android, ja'ai un peu de mal à comprendre pourquoi certaine chose de fonctionne pas comme je voudrais.
J'ai créer un linear-layout dans mes ressource et je souhaite insérer ce dernier lors d'un évènement clic, mais malheureusement mon code fait planté l’application.

voici le linear_layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@color/anim_linear"
    android:id="@+id/anim_linear"
    android:name="anim_linear">
</LinearLayout>


le activity_main:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/fondPrincipal"
    android:id="@+id/layoutPrincipal">

    <Button
        style="@style/bouton"
        android:id="@+id/boutonMillieu"
        android:text="@string/cliquezMoi2"/>
</RelativeLayout>


et le java:

package fr.test;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity
{
    private RelativeLayout layoutPrincipal;
    private LinearLayout animLinear;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        layoutPrincipal = findViewById(R.id.layoutPrincipal);
        Button boutonMillieu = findViewById(R.id.boutonMillieu);

        boutonMillieu.setOnClickListener(new ClickBoutonMillieu());
    }

    class ClickBoutonMillieu implements View.OnClickListener
    {
        @Override
        public void onClick(View v)
        {
            //animLinear = (LinearLayout) findViewById(R.id.anim_linear);
            animLinear = (LinearLayout) getResources().getLayout(R.layout.anim_linear);
            layoutPrincipal.addView(animLinear);
        }
    }
}


du coup, dés que je click sur le bouton du milieu, l'appli plante.
Merci pour coup de main.
Configuration: Linux / Firefox 78.0
A voir également:

3 réponses

BunoCS Messages postés 15952 Date d'inscription   Statut Modérateur Dernière intervention   3 918
 
Hello,

Ce n'est pas comme ceci que l'on récupère une View à partir d'une ressource de type Layout. Il faut utiliser LayoutInflater

final LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout linearLayout = (LinearLayout)inflater.inflate(R.layout.anim_linear, null);

1
lamouchetsetse Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci pour la réponse rapide, cependant, comment doit on procéder pour ajouter le layout une fois qu'on l'a récupéré., j'ai bien tenté un addView(linearLyout) mais rien ne s'ajoute lors du clic

class ClickBoutonMillieu implements View.OnClickListener
    {
        @Override
        public void onClick(View v)
        {
            final LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            LinearLayout linearLayout = (LinearLayout)inflater.inflate(R.layout.anim_linear, null);

            layoutPrincipal.addView(linearLayout);
        }
    }
0
lamouchetsetse Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   2
 
Bien, je pense avoir trouvé la "bonne" façon de faire.
j'ai remplacer cette ligne:
LinearLayout linearLayout = (LinearLayout)inflater.inflate(R.layout.anim_linear, null);

par:
LinearLayout linearLayout = (LinearLayout)inflater.inflate(R.layout.anim_linear, layoutPrincipal, false);


maintenant ça fonctionne.
Merci de m'avoir mis sur la bonne voie
0