从EditTexts添加数字

时间:2014-08-21 09:41:04

标签: android android-listview android-edittext

我创建了一个Activity,其中有一个“添加主题”按钮。当我按下它时,它会在ListView中创建一个项目,该项目由EditText组成,用户输入一个数字。

我想要做的是在创建的每个项目的EditTexts中添加数字,具体取决于用户是否通过按钮在ListView中创建了3,4,5等项目。

以下是活动的代码:

public class PersActivity extends Activity {

Button start, calcaverage1;

private SubjectAdapter adapter;

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

    setupListViewAdapter();

    setupAddMarkButton();

    // Accept button
            Button acceptbn= (Button)findViewById(R.id.start1);
            acceptbn.setOnClickListener(new OnClickListener() 
            {   public void onClick(View v) 
                {   
                    Intent intent = new Intent(PersActivity.this, MainActivity.class);
                        startActivity(intent);      
                        finish();
                }
            });
}

public void removeClick(View v) {
    Mark itemToRemove = (Mark)v.getTag();
    adapter.remove(itemToRemove);
}

private void setupListViewAdapter() {
    adapter = new SubjectAdapter(PersActivity.this, R.layout.subject_list_item, new ArrayList<Mark>());
    ListView atomPaysListView = (ListView)findViewById(R.id.subject_list_item);
    atomPaysListView.setAdapter(adapter);
}

private void setupAddMarkButton() {
    findViewById(R.id.addsubject).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            adapter.insert(new Mark("", 0), 0);
        }
    });
}
}

以下是适配器的代码:

public class SubjectAdapter extends ArrayAdapter<Mark> {

protected static final String LOG_TAG = SubjectAdapter.class.getSimpleName();

private List<Mark> items;
private int layoutResourceId;
private Context context;

public SubjectAdapter(Context context, int layoutResourceId, List<Mark> items) {
    super(context, layoutResourceId, items);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.items = items;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    MarkHolder holder = null;

    LayoutInflater inflater = ((Activity) context).getLayoutInflater();
    row = inflater.inflate(layoutResourceId, parent, false);

    holder = new MarkHolder();
    holder.Mark = items.get(position);
    holder.removePaymentButton = (ImageButton)row.findViewById(R.id.remove);
    holder.removePaymentButton.setTag(holder.Mark);

    holder.name = (TextView)row.findViewById(R.id.subjectname);
    setNameTextChangeListener(holder);
    holder.value = (TextView)row.findViewById(R.id.subjectmark);
    setValueTextListeners(holder);

    row.setTag(holder);

    setupItem(holder);
    return row;
}

private void setupItem(MarkHolder holder) {
    holder.name.setText(holder.Mark.getName());
    holder.value.setText(String.valueOf(holder.Mark.getValue()));
}

public static class MarkHolder {
    Mark Mark;
    TextView name;
    TextView value;
    ImageButton removePaymentButton;
}

private void setNameTextChangeListener(final MarkHolder holder) {
    holder.name.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            holder.Mark.setName(s.toString());
        }

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

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

private void setValueTextListeners(final MarkHolder holder) {
    holder.value.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            try{
                holder.Mark.setValue(Double.parseDouble(s.toString()));
            }catch (NumberFormatException e) {
                Log.e(LOG_TAG, "error reading double value: " + s.toString());
            }
        }

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

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

我已经实现了serializable来通过适配器传递数据:

public class Mark implements Serializable {
private static final long serialVersionUID = -5435670920302756945L;

private String name = "";
private double value = 0;

public Mark(String name, double value) {
    this.setName(name);
    this.setValue(value);
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public double getValue() {
    return value;
}

public void setValue(double value) {
    this.value = value;
}
}

希望有一个解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

以下是你将如何做到这一点

addNumberFromText()
{
    int total=0;
    for(int i=0;i<listView.getChildCount();i++)
    {
        View wantedView = listView.getChildAt(i);
        EditText edtText=view.findViewById(R.id.specificEditTextId);
        //not checking wheter integer valid or not, Please do so
        int value=Integer.parseInt(edtText.toString());
        total+=value;
    }
    Log.d(TAG,"total sum is "+total);
}

从以下代码

更新您的活动
public class PersActivity extends Activity 
{

Button start, calcaverage1;

private SubjectAdapter adapter;
ListView atomPaysListView;
@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.subject_list_view);
     atomPaysListView = (ListView)findViewById(R.id.subject_list_item);
    setupListViewAdapter();

    setupAddMarkButton();

    // Accept button
            Button acceptbn= (Button)findViewById(R.id.start1);
            acceptbn.setOnClickListener(new OnClickListener() 
            {   public void onClick(View v) 
                {   
                    Intent intent = new Intent(PersActivity.this, MainActivity.class);
                        startActivity(intent);      
                        finish();
                }
            });
}

public void removeClick(View v) {
    Mark itemToRemove = (Mark)v.getTag();
    adapter.remove(itemToRemove);
}

private void setupListViewAdapter() {
    adapter = new SubjectAdapter(PersActivity.this, R.layout.subject_list_item, new ArrayList<Mark>());

    atomPaysListView.setAdapter(adapter);
}

private void setupAddMarkButton() {
    findViewById(R.id.addsubject).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            adapter.insert(new Mark("", 0), 0);
        }
    });
}



addNumberFromText()
    {
        double total=0;
        for(int i=0;i<atomPaysListView.getChildCount();i++)
        {
            View wantedView = atomPaysListView.getChildAt(i);

            /*
            // if edit text
            EditText edt=(EditText)view.findViewById(R.id.editText);
            //not checking wheter valid or not, Please do so
            double value=Double.parseDouble(edt.toString());
            */

            //you say edittext, but its a textview or so it seems
            TextView txv=(TextView)view.findViewById(R.id.subjectmark);
            //not checking wheter valid or not, Please do so
            double value=Double.parseDouble(txv.toString());


            total+=value;
        }
        Log.d(TAG,"total sum is "+total);
    }

}