2 votes

Vue dynamique avec bouton d'ajout, comment trouver l'ID edtxt unique ou tout autre élément

Je construis une application Android où je crée une dynamique EditText Vue. J'ai besoin d'afficher la somme de tous les EditText sur le dessus TextView . Je ne parviens pas à trouver un moyen de le faire. Quelqu'un peut-il m'aider ?

Et je ne comprends pas non plus que, lorsque je clique sur le bouton d'ajout, seule une vue dynamique semble être vivante, et que le reste semble dormir.... ( c'est juste une partie de mon programme ...)

Merci d'avance.

Voici mon XML

<LinearLayout
    android:id="@+id/linearBelowBoard"
    android:orientation="vertical"
    android:layout_below="@+id/button2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

</LinearLayout>

<Button
    android:text="Add"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/button2"
    android:layout_below="@+id/totalText"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="111dp"
    android:layout_marginStart="111dp" />

<TextView
    android:text="Sum"
    android:textStyle="bold"
    android:textSize="40dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/totalText"
    android:layout_alignParentTop="true"
    android:layout_alignRight="@+id/button2"
    android:layout_alignEnd="@+id/button2" />

row.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:ems="10"
            android:id="@+id/editText"
            android:textColor="#000000"
            android:layout_toLeftOf="@+id/button"
            android:layout_toStartOf="@+id/button" />

        <Button
            android:text="Delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:id="@+id/button" />

    </RelativeLayout>

</LinearLayout>

Voici mon fichier Java

    package com.example.rajiv.aaaplusbutton;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    EditText edt1;
    Button but_add, but_remove;
    TextView txtSum;
    LinearLayout linearBelowBoard;
    int e1;

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

        linearBelowBoard = (LinearLayout) findViewById(R.id.linearBelowBoard);

        txtSum=(TextView)findViewById(R.id.totalText);

        but_add = (Button) findViewById(R.id.button2);
        but_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                LayoutInflater layoutInflater =
                        (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                final View addView = layoutInflater.inflate(R.layout.row, null);

                edt1 = (EditText) addView.findViewById(R.id.editText);

                edt1.addTextChangedListener(new TextWatcher() {

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before,
                                              int count) {
                    }

                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count,
                                                  int after) {
                        if (s.length() > 0) {

                        }
                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                        calCheck();
                    }
                });

                Button but_remove = (Button) addView.findViewById(R.id.button);
                final View.OnClickListener thisListener = new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ((LinearLayout) addView.getParent()).removeView(addView);
                    }
                };

                but_remove.setOnClickListener(thisListener);
                linearBelowBoard.addView(addView);

            }

        });

    }

    public void calCheck() {

        try {
            e1 = Integer.parseInt(edt1.getText().toString());
            txtSum.setText(Integer.toString(" What to Do? "));

        } catch (Exception e) {
}
}

2voto

Chetan Joshi Points 3865

Utilisez le code ci-dessous pour résoudre votre problème : J'ai fait quelques changements dans votre code Essayez avec ceci :

package com.cj.myapplication;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * Created by CHETAN JOSHI on 3/6/2017.
 */

public class MainActivity extends AppCompatActivity {

    EditText edt1;
    Button but_add, but_remove;
    TextView txtSum;
    LinearLayout linearBelowBoard;
    int e1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        linearBelowBoard = (LinearLayout) findViewById(R.id.linearBelowBoard);
        txtSum = (TextView) findViewById(R.id.totalText);
        but_add = (Button) findViewById(R.id.button2);

        but_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                LayoutInflater layoutInflater =
                        (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                final View addView = layoutInflater.inflate(R.layout.row, null);

                edt1 = (EditText) addView.findViewById(R.id.editText);
                edt1.addTextChangedListener(new MyTextWatcher(edt1));
                Button but_remove = (Button) addView.findViewById(R.id.button);
                final View.OnClickListener thisListener = new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ((LinearLayout) addView.getParent()).removeView(addView);
                    }
                };

                but_remove.setOnClickListener(thisListener);
                linearBelowBoard.addView(addView);

            }

        });

    }

    private class MyTextWatcher implements TextWatcher {

        EditText mEditText = null;

        public MyTextWatcher(EditText mEditText) {
            this.mEditText = mEditText;
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            calCheck(mEditText);
        }
    }

    public void calCheck(EditText editText) {
  try {
        if (linearBelowBoard != null) {
            e1 =0;
            for (int i = 0; i < linearBelowBoard.getChildCount(); i++) {
                LinearLayout linearLayout = (LinearLayout)linearBelowBoard.getChildAt(i);
                RelativeLayout relativeLayout = (RelativeLayout)linearLayout.getChildAt(0);
                View view = relativeLayout.getChildAt(0);
                EditText editText1 = null;
                if (view instanceof EditText) {
                    editText1 = (EditText) view;
                } else {
                    view = relativeLayout.getChildAt(1);
                    editText1 = (EditText) view;
                }
                String str = editText1.getText().toString();
                if(str!=null && !str.equals("") && str.length()>0)
                e1 = e1 + Integer.parseInt(editText1.getText().toString());
            }
            }
        txtSum.setText("" + String.valueOf(e1));

    } catch (Exception e) {
        e.printStackTrace();
    }
    }
}

enter image description here

S'il te plaît, vérifie que je crée une autre méthode qui retourne EditText par position de passage. Ainsi, vous devez passer n'importe quelle position jusqu'à l'addition des comptes de EditText alors vous obtiendrez EditText et vous pouvez utiliser getText().toString().

mettre à jour la méthode calCheck() :

  public void calCheck(EditText editText) {
        try {
            if (linearBelowBoard != null) {
                e1 = 0;
                for (int i = 0; i < linearBelowBoard.getChildCount(); i++) {
                    EditText editText1 = getEditTextFromPosition(i);
                    String str = editText1.getText().toString();
                    if (str != null && !str.equals("") && str.length() > 0)
                        e1 = e1 + Integer.parseInt(editText1.getText().toString());
                }
            }
            txtSum.setText("" + String.valueOf(e1));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Utilisez la méthode ci-dessous pour obtenir Editext :

    private EditText getEditTextFromPosition(int position){
        EditText editText=null;
        LinearLayout linearLayout = (LinearLayout)linearBelowBoard.getChildAt(position);
        RelativeLayout relativeLayout = (RelativeLayout)linearLayout.getChildAt(0);
        View view = relativeLayout.getChildAt(0);

        if (view instanceof EditText) {
            editText = (EditText) view;
        } else {
            view = relativeLayout.getChildAt(1);
            editText = (EditText) view;
        }
        return editText;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X