0

名前とマークの2 つの EditText フィールドと、[追加] ボタンが 1 つあります。

[追加] ボタンがクリックされるたびに、毎回 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 が public であると宣言します。そうしないと、クリックするたびに作成され、最後のアイテムのみが保存されます

 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初期化してみて、内部で新しいエントリを追加するだけです。onCreateonClick

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毎回新しいリストを作成し、それに 1 つのエントリのみを追加しているため、1 つの値のみが表示されます。

アップデート:

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

これは、インクリメントされた値ではなく 1 つの値のみを出力するたびに表示されます。

これは、 を呼び出すたびにgetIncrementValue()、新しい変数を宣言して初期化しa = 0、それをインクリメントして返すためです。したがって、変数を 1 にインクリメントして 1 を返すたびに (2 や 3 などではなく)

このために、クラスを少し変更し、variable aそのメソッドの外側で宣言してクラス変数にする必要があります(あなたの場合ArrayList<String> data = new ArrayList<String>();、行の直後に宣言しますArrayAdapter<String> 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

これで、コードでそれが起こる理由を理解できます。

したがって、コードを少し調整してみてください。問題ありません。

于 2013-02-16T09:10:55.893 に答える