0

Android アプリケーションでは、スピナーに EditText オブジェクトからのデータを入力しています。そして、adapter.add(somestring) メソッドで追加しようとするとクラッシュするので、助けが必要です。...これがコードです

public class OptionsMenu extends Activity implements View.OnClickListener{

    Spinner users;
    EditText input;
    Button add,remove;

    public static String filename = "savedData";
    SharedPreferences sharedData;
    String stringUsers;

   ArrayAdapter<CharSequence> adapter;

   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.options_menu);

        Create();
        sharedData = getSharedPreferences(filename, 0);    
   }

private void Create() {
    // TODO Auto-generated method stub
    users = (Spinner) findViewById(R.id.sp_op_users);
    input = (EditText) findViewById(R.id.tb_op_inputUsers);
    add = (Button) findViewById(R.id.bt_op_add);
    remove = (Button) findViewById(R.id.bt_op_remove);

    add.setOnClickListener(this);
    remove.setOnClickListener(this);

    //------------ADAPTER-----------------  
    adapter = ArrayAdapter.createFromResource(this, R.array.users,
                        android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(
                android.R.layout.simple_spinner_dropdown_item);

    users.setAdapter(adapter);
}

public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId())
    {
        case R.id.bt_op_add:
            if (!input.getText().toString().equals("")) {
                CharSequence inputData = input.getText().toString();
                adapter.add(inputData);

                adapter.notifyDataSetChanged();
                users.setAdapter(adapter);
            }
            input.setText("");
            users.setSelection(Adapter.NO_SELECTION);
            break;
        case R.id.bt_op_remove:
            break;
    }
}   
4

2 に答える 2

2

エラーが発生する理由はよくわかりませんが、if状態が間違っています。

次の行を変更します。

if (input.getText().toString() != "") 

if (!input.getText().toString().equals("")) 

記号stringsを使って比較しません。=

編集

おそらく、最初にリソース ファイルから配列を取得し、そのローカル バージョンを作成できます。

String[] usersList=getResources().getStringArray(R.array.users);

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, usersList)

これusersListを のデータのリストとして使用しますadapter

于 2012-06-25T18:15:37.770 に答える
1

を使用してアダプタを作成しcreateFromResource()、リソースからのデータを提供しました。この方法で行うと、リストが修正され、リストに要素を追加したり、リストから要素を削除したりできなくなります。これが、を呼び出そうとするとクラッシュした理由ですadapter.add()

add()スピナーに動的データを含める場合は、リソースから作成するのではなく、を使用してスピナーにすべての要素を追加する必要があります。

編集:コード例を追加

onCreate()で、スピナーアダプターを作成して初期化します

List<String> items = ... // These are your items you get from a resource or read
                         //  from a file or whatever
// Create the adapter, initializing it with the list of items, attach to spinner
adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
for (String item : items) {
    adapter.add(item);
}
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
users.setAdapter(adapter);

onClick()で、スピナーにアイテムを追加するには:

case R.id.bt_op_add:
    if (!input.getText().toString().equals("")) {
        CharSequence inputData = input.getText().toString();
        adapter.add(inputData);
        // You shouldn't need to reset the adapter on the spinner, nor call
        //  notifyDataSetChanged() here
    }
    input.setText("");
    users.setSelection(Adapter.NO_SELECTION);
    break;
于 2012-06-25T18:36:55.997 に答える