0

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

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

但是,我只能在列表视图上显示一个值。

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

我想在列表视图中填充整个列表。

public class MainActivity extends Activity {
EditText name1;
EditText marks1;
private ListView lv;
ArrayAdapter<String> 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<String> data = new ArrayList<String>();
                     data.add("  "+name+"                         "+marks);


                     aa =      
                     new ArrayAdapter<String>(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;
}
 }
4

3 回答 3

1

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

 public class MainActivity extends Activity {
 EditText name1;
  EditText marks1;
 private ListView lv;
 ArrayAdapter<String> aa;
 ArrayList<String> data = new ArrayList<String>();
 @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<String>(MainActivity.this,android.R.layout.simple_list_item_1, data);

                 lv.setAdapter(aa); 

               }
            }catch(Exception ex)
            {
                System.out.println(ex.getStackTrace());
            }
     }
});

}
于 2013-02-16T09:12:37.203 回答
0

不要创建和初始化你的datainside onClick,而是尝试在onCreate方法中初始化它,然后在里面onClick添加新条目:

ArrayList<String> data = new ArrayList<String>();
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 等等)

为此,我需要稍微更改我的类,variable a在该方法之外声明使其成为类变量(在您的情况下ArrayList<String> data = new ArrayList<String>();,在该行之后声明ArrayAdapter<String> aa;

公共类 MyClass{ int a = 0; 公共 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

现在您可以理解为什么您的代码会发生这种情况。

所以试着稍微调整一下你的代码,它会没事的。

于 2013-02-16T09:10:55.893 回答
0

根据您的问题,我为您做了一些事情..我创建了两个编辑文本作为名称和标记,并创建了两个列表名称作为 list 和 list2...和一个添加按钮...运行此代码,您的 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<String> list = new ArrayList<String>();
ArrayAdapter<String> adapter;
ArrayList<String> list2 = new ArrayList<String>();
ArrayAdapter<String> 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<String>(this, android.R.layout.simple_list_item_1, list);
      lv.setAdapter(adapter);
  adapter2 = new ArrayAdapter<String>(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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/textView2" >

</ListView>

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/list"
    android:layout_marginTop="36dp"
    android:text="Enter name"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/name"
    android:layout_width="80dp"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/list"
    android:layout_alignRight="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="15dp"
    android:ems="10"
    android:inputType="textPersonName" >

    <requestFocus />
</EditText>

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/textView1"
    android:layout_alignBottom="@+id/textView1"
    android:layout_marginLeft="28dp"
    android:layout_toRightOf="@+id/textView1"
    android:text="Enter marks"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<ListView
    android:id="@+id/list2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView1"
    android:layout_alignLeft="@+id/textView2"
    android:layout_alignParentTop="true"
    android:layout_alignRight="@+id/textView2" >

</ListView>

<EditText
    android:id="@+id/marks"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/name"
    android:layout_alignLeft="@+id/textView2"
    android:layout_alignRight="@+id/textView2"
    android:ems="10" />

<Button
    android:id="@+id/add"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/name"
    android:layout_marginTop="33dp"
    android:layout_toRightOf="@+id/name"
    android:text="ADD" />

</RelativeLayout>

你的 min sdk 版本应该是 11

于 2014-01-03T12:39:18.567 回答