2017-03-06 25 views
2

我正在建立一个Android应用程序,我创建动态EditText视图。我需要显示顶部TextView上的所有EditText的总和。我无法找到办法做到这一点,任何人都可以帮助我。动态视图与添加按钮,如何找到唯一的编辑ID或其他任何其他

我也是不理解,当我点击添加按钮,只有一个动态的观点似乎是生活,其余的似乎睡....(这只是我的程序的一部分。 ..)

ThankYou in Advance。

这里是我的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> 

这里是我的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) { 
} 
} 

回答

2

使用下面的代码来解决你的问题:我在你的代码中做了一些改变试试这个:

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

请查看我箱子多了一个通过传递位置返回EditText方法。 所以你需要通过任何职位,直到添加计数EditText然后你会得到EditText,你可以getText()。toString()。

更新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(); 
     } 
    } 

使用下面的方法来获得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; 
    } 
+0

尼斯一个TNX它..但我想补充的所有EDITTEXT的Fileds ... txtSum.setText(“”+ String.valueOf(e1)); 那里需要做什么......? –

+0

是的我只知道一分钟我会用这个更新我的代码。 –

+0

看到我更新的答案。 –

相关问题