Android Spinners, скажем, я извлекаю выбор счетчиков из SQL, могу ли я также добавить их SQL _id к значениям счетчиков? - PullRequest
0 голосов
/ 08 августа 2011

Я запрашиваю свою базу данных SQL, чтобы заполнить мои счетчики, у меня нет проблем с заполнением счетчика массивом строк из полученных названий книг (это приложение в стиле библиотеки). В то время как получение названий книг в бланк для выбора не составляет проблемы, как лучше связать эти заголовки с их SQL _id? Я искал способ сделать спиннеры "многомерными", но пока не понимаю, как.

Любая помощь в правильном направлении будет высоко ценится, спасибо!

Ответы [ 3 ]

1 голос
/ 08 августа 2011

Я использовал многомерный массив для моего счетчика.Он захватывает вещи из string[i][0] и идентификаторы в string[i][1].Позвольте мне взять код, который я использовал для этого.

public class BNYDirectory extends Activity {

    public static String[] Fields = new String[6];

    public static String[][] BookResults;
    public ArrayAdapter<CharSequence> booksAdapter;

    public ProgressDialog dialog;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.searchscreen);

        new getAllData().execute(this);

        final EditText fname = (EditText) findViewById(R.id.fname);
        final EditText lname = (EditText) findViewById(R.id.lname);
        final EditText aim = (EditText) findViewById(R.id.aim);
        final EditText phone = (EditText) findViewById(R.id.phone);
        final Spinner books = (Spinner) findViewById(R.id.book);

       //Sets up and fills the department spinner
        booksAdapter = new ArrayAdapter<CharSequence>(BNYDirectory.this, android.R.layout.simple_spinner_item);
        booksAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        books.setAdapter(booksAdapter);

      //Search button
        findViewById(R.id.search).setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

              //This grabs the ID from the String[][] for the selected spinner item
                String bookName = BookResults[(int)books.getSelectedItemId()][0];
                String bookId = BookResults[(int)books.getSelectedItemId()][1];

            }
        });
    }


    private class getAllData extends AsyncTask<Context, Void, Cursor> {
        protected void onPreExecute () {
            dialog = ProgressDialog.show(BNYDirectory.this, "", 
                    "Loading. Please wait...", true);
        }

        @Override
        protected Cursor doInBackground(Context... params) {
            setBooks();
            return null;
        }

        protected void onPostExecute(Cursor c) {
            for(int i = 0 ; i < BookResults.length ; i++){
                booksAdapter.add(BookResults[i][0]);            
            }
            dialog.dismiss();
        }
    }

    public static void setBooks(){

        //Basically this sets the String[][] DeptResults so that DeptResults[n][0] is the names, and DeptResults[n][1] is the ID that matches for n.
        //books[n][0] = book name
        //books[n][1] = book ID

        BookResults = books;

    }
}

Хорошо, так что для этого используется переменная класса String[][] BookResults для хранения обоих значений, имени (в [] [0]) иid (в [] [1]).BookResults[10][0] будет названием книги для идентификатора BookResults[10][1].«Кнопка поиска» в этом примере показывает, как вы получите оба значения.

1 голос
/ 08 августа 2011

Вам определенно нужен SimpleCursorAdapter. Вы должны включить _id в запросе выбора. Вот пример ...

Spinner spinner = (Spinner) dialog.findViewById(R.id.mm_spinner);

// DatabaseInterface would be your data access class...
DatabaseInterface db = new DatabaseInterface(this);
db.open();

Cursor c = db.getNames(); // This would contain _id, name from a database for example.

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      android.R.layout.simple_spinner_item,
      c,
      new String[] {DatabaseInterface.KEY_ID, DatabaseInterface.KEY_NAME}, 
      new int[] {android.R.id.text1});

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

... Это свяжет _id с идентификатором счетчика. Поэтому, когда вы выбираете элемент в списке с помощью onitemclicklistener, как я писал ниже. У вас будут правильные _id, связанные с каждым из имен в списке ...

spinner.setOnItemClickListener(new OnItemClickListener() {
     public void onItemClick(AdapterView parent, View view, int position, long id){
           // id = the _id from the cursor
     }
}); 
0 голосов
/ 08 августа 2011

Узнайте, как использовать SimpleCursorAdapter с Spinner и настраиваемое представление для дочерних макетов. :)

Вот учебник.

...