如何在android中单击按钮时在listview中显示EditText的值

我有两个EditText字段, 即名称和标记,以及一个添加按钮。

每当点击“添加”按钮时,我必须每次都显示EditText值。

但是,我只能在listview上只显示一个值。

当我再次单击“添加”按钮时,其先前的值将被删除,并且更新的值将显示在列表视图中。

我想在listview中填充整个列表。

public class MainActivity extends Activity { EditText name1; EditText marks1; private ListView lv; ArrayAdapter aa; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); TextView markshee = (TextView)findViewById(R.id.textView3); markshee.setText(""); Button btnAdd = (Button) findViewById(R.id.button1); btnAdd.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { try{ name1 = (EditText)findViewById(R.id.editText1); String name = name1.getText().toString(); marks1 = (EditText)findViewById(R.id.editText2); String marks = marks1.getText().toString(); if(name.equals("") || marks.equals("")){ String str="Don't Leave any field blank !"; Toast toast = Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } else { TextView marksheet = (TextView)findViewById(R.id.textView3); marksheet.setText("Marks Sheet"); marksheet.setTextColor(Color.BLUE); TextView nam = (TextView)findViewById(R.id.textView4); nam.setText("Name"); nam.setTextColor(Color.RED); TextView mar = (TextView)findViewById(R.id.textView5); mar.setText("Marks"); mar.setTextColor(Color.RED); name1.setText(""); marks1.setText(""); lv = (ListView) findViewById(R.id.listView1); lv.setItemsCanFocus(true); ArrayList data = new ArrayList(); data.add(" "+name+" "+marks); aa = new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1, data); lv.setAdapter(aa); } }catch(Exception ex) { System.out.println(ex.getStackTrace()); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

试试这个:你声明ArrayList是公共的,否则它会创建每次点击和sotre最后的项目

  public class MainActivity extends Activity { EditText name1; EditText marks1; private ListView lv; ArrayAdapter aa; ArrayList data = new ArrayList(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); TextView markshee = (TextView)findViewById(R.id.textView3); markshee.setText(""); Button btnAdd = (Button) findViewById(R.id.button1); btnAdd.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { try{ name1 = (EditText)findViewById(R.id.editText1); String name = name1.getText().toString(); marks1 = (EditText)findViewById(R.id.editText2); String marks = marks1.getText().toString(); if(name.equals("") || marks.equals("")){ String str="Don't Leave any field blank !"; Toast toast = Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } else { TextView marksheet = (TextView)findViewById(R.id.textView3); marksheet.setText("Marks Sheet"); marksheet.setTextColor(Color.BLUE); TextView nam = (TextView)findViewById(R.id.textView4); nam.setText("Name"); nam.setTextColor(Color.RED); TextView mar = (TextView)findViewById(R.id.textView5); mar.setText("Marks"); mar.setTextColor(Color.RED); name1.setText(""); marks1.setText(""); lv = (ListView) findViewById(R.id.listView1); lv.setItemsCanFocus(true); data.add(" "+name+" "+marks); aa = new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1, data); lv.setAdapter(aa); } }catch(Exception ex) { System.out.println(ex.getStackTrace()); } } }); } 

而不是在onClick中创建和初始化data ,尝试在onCreate方法中初始化它,并在onClick内部添加新条目:

 ArrayList data = new ArrayList(); Button btnAdd = (Button) findViewById(R.id.button1); btnAdd.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v) { ..... ..... ..... data.add(" "+name+" "+marks); .... } } 

使用现有代码,当调用onClick方法时,每次都会创建一个新的列表data并且只向其添加一个条目,因此它只显示一个值。

更新:

让我们看一个例子:让我们说一个类,我需要在调用方法getIncrementValue获得增量值,每次调用它时都应返回当前值+1。

这是它的代码:

 public class MyClass{ public int getIncrementValue(){ int a = 0; a = a+1; return a; } } 

现在,如果我将此方法称为:

 MyClass m = new MyClass(); System.out.println(m.getIncrementValue()); //prints 1 System.out.println(m.getIncrementValue()); //prints 1 should print 2 right System.out.println(m.getIncrementValue()); //prints 1 should print 3 right 

每次打印时只显示一个值而不是递增值,就会看到这一点。

这是因为每次调用getIncrementValue() ,我都声明并初始化一个新变量a = 0并递增并返回它,因此每次将它递增到1并返回1(而不是2和3等等)

为此我需要更改slighlty我的类,声明variable a外部的方法使它成为一个类变量(在你的情况下声明ArrayList data = new ArrayList();就在ArrayAdapter aa;行之后ArrayAdapter aa;

public class MyClass {int a = 0; public int getIncrementValue(){a = a + 1; 返回; }}

现在,如果我将此方法称为:

 MyClass m = new MyClass(); System.out.println(m.getIncrementValue()); //prints 1 System.out.println(m.getIncrementValue()); //prints 2 should print 2 right System.out.println(m.getIncrementValue()); //prints 3 should print 3 right 

现在你可以理解你的代码会发生什么。

所以尝试稍微调整一下代码就可以了。

根据你的问题,我已经为你做了一些事情..我创建了两个编辑文本作为名称和标记,并创建了两个列表名称列表和列表2 …和一个添加按钮…运行此代码您的min sdk版本应该是11 ..否则它将无法工作….当您在编辑文本框中输入值并单击添加按钮时,这些值将显示在两个不同的列表上,并且永远不会删除以前的值…..按照我的代码。 ..

MainActivity.java

 package com.example.textview; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; public class MainActivity extends Activity { EditText Name, Marks; Button Add; ListView lv, lv2; ArrayList list = new ArrayList(); ArrayAdapter adapter; ArrayList list2 = new ArrayList(); ArrayAdapter adapter2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Name=(EditText)findViewById(R.id.name); Marks=(EditText)findViewById(R.id.marks); Add=(Button)findViewById(R.id.add); lv=(ListView)findViewById(R.id.list); lv2=(ListView)findViewById(R.id.list2); adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list); lv.setAdapter(adapter); adapter2 = new ArrayAdapter(this, android.R.layout.simple_list_item_activated_1, list2); lv2.setAdapter(adapter2); Add.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { String name = Name.getText().toString(); String marks = Marks.getText().toString(); if(name.length() > 0 && marks.length() > 0) { list.add(name); adapter.notifyDataSetChanged(); list2.add(marks); adapter2.notifyDataSetChanged(); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

activity_main.xml中

              

你的min sdk版应该是11