如何在Android Studio中创建用于计算频率和百分比的动态表?

时间:2017-09-28 15:14:37

标签: android dynamic android-tablelayout

我想创建一个能够生成统计处理结果的Android应用程序

enter image description here

图像中的图1将是用户在我的应用程序中看到的初始表;它只包含一行有三列,然后如果用户单击“添加”按钮,它将在表中添加另一行,其中包含三列。每次用户将数据添加到表中时,它会自动计算数据的百分比,就像图2中的示例一样。 我希望你明白我想做什么。 我真的需要制作这种应用程序,我希望你能帮助我,因为我真的不知道创建一个自动计算数据的动态表的逻辑。 我将非常感谢你的帮助。

This is the finished output of my application

1 个答案:

答案 0 :(得分:0)

好的,所以我认为你想要做的是:

  1. 添加空行
  2. 在EditText上更改重新计算
  3. 首先添加空行:

    private void AddRow(){
      TableLayout tl = (TableLayout) findViewById(R.id.somelayout);
      TableRow row= new TableRow(this);
      TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
      row.setLayoutParams(lp);
      EditText fruit = new EditText(this);
      EditText freq = new EditText(this);
      EditText perc = new EditText(this);
      freq.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable s) {
                ReCalculate();
            }
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
            public void onTextChanged(CharSequence s, int start, int before, int count) {}
        });
      row.addView(fruit);
      row.addView(freq);
      row.addView(perc);
      tl.addView(row,i);
    }
    
    private void ReCalculate(){
        float sum = 0f;
        int rows = tl.getChildCount();
        // Get the total
        for (int i = 0; i < rows; i++) {
            TableRow elem = (TableRow) tl.getChildAt(i);
            sum+= Integer.parseInt(((EditText)elem.getChildAt(1)).getText().toString());
        }
        // Recalculate every row percent
        for (int i = 0; i < rows; i++) {
            TableRow elem = (TableRow) tl.getChildAt(i);
            int amount = Integer.parseInt(((EditText)elem.getChildAt(1)).getText().toString());
            ((EditText)elem.getChildAt(1)).setText(String.valueOf(amount/sum*100));
        }
    }
    

    <强>编辑: 该按钮不是动态创建的,因此您不需要为它或OnClickListener调用row.addView()。按钮的OnClickListener将只调用AddRow()

    这可能有一些错误,你需要检查空文本,但只想给你一个例子。希望它有所帮助