Ajouter un layout lors d'un click

Résolu/Fermé
lamouchetsetse Messages postés 112 Date d'inscription samedi 2 août 2014 Statut Membre Dernière intervention 21 septembre 2021 - 24 juil. 2020 à 08:54
lamouchetsetse Messages postés 112 Date d'inscription samedi 2 août 2014 Statut Membre Dernière intervention 21 septembre 2021 - 24 juil. 2020 à 18:03
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 15461 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 13 février 2024 3 894
24 juil. 2020 à 09:19
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 samedi 2 août 2014 Statut Membre Dernière intervention 21 septembre 2021 2
24 juil. 2020 à 17:45
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 samedi 2 août 2014 Statut Membre Dernière intervention 21 septembre 2021 2
24 juil. 2020 à 18:03
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