Dialog Spinner不返回值

时间:2012-12-20 04:11:07

标签: android dialog spinner

我有一个对话框设置,其中有两个旋转器连接到游标。我在这个网站的帮助下解决了一些问题,但我似乎无法克服这一点。我发现的一切都是我已经尝试过的东西。 问题是,当我单击微调器选择或单击“提交”退出对话框时,微调器值不是它应该的值。我正在使用一些代码获取包名称。我试图通过.getSelectedItem().toString();从微调器中获取字符串 我目前已将代码设置为使用onItemSelected,但在此之前,我尝试在点击提交后使用getItemSelected。似乎都没有用。

以下是此部分的代码。 最后,值将进入textview。显示的值是“android.database.sqlite.sqliteCursor@414175e0”

有什么想法吗?

 private void transfer() {
     dialog = new Dialog(this, android.R.style.Theme_Holo_Light_Dialog_MinWidth);
     dialog.setContentView(R.layout.transfer_dialog);
     dialog.setTitle(R.string.transfer_accounts);
     Button btnCancel = (Button)dialog.findViewById(R.id.btnCancel);
     Button btnSubmit = (Button)dialog.findViewById(R.id.btnSubmit);

     Cursor load_spinner = mDbHelper.spinnerAccounts();
     startManagingCursor(load_spinner);

     String[] columns = new String[] { RegisterDbAdapter.ACCOUNTS_ACCOUNT };
     int[] to = new int[] { android.R.id.text1 };

     SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, load_spinner, columns, to);
     mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     spinnerFrom = (Spinner)dialog.findViewById(R.id.spinnerFrom);
     spinnerTo = (Spinner)dialog.findViewById(R.id.spinnerTo);
     spinnerFrom.setAdapter(mAdapter);
     spinnerTo.setAdapter(mAdapter);
     dialog.show();

     spinnerFrom.setOnItemSelectedListener(new OnItemSelectedListener(){
         public void onItemSelected(AdapterView<?> parent, View arg1, int arg2, long arg3) {
             fromAccount = parent.getSelectedItem().toString();
         }
         public void onNothingSelected(AdapterView<?> arg0) {
             // TODO Auto-generated method stub
         }
        }); 
     spinnerTo.setOnItemSelectedListener(new OnItemSelectedListener(){
         public void onItemSelected(AdapterView<?> parent, View arg1, int arg2, long arg3) {
             toAccount = parent.getSelectedItem().toString();
         }
         public void onNothingSelected(AdapterView<?> arg0) {
             // TODO Auto-generated method stub
         }
        });
     btnCancel.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 dialog.dismiss(); 
            }
          });

     btnSubmit.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 tvFrom.setText(fromAccount);
                 tvTo.setText(toAccount);
                 dialog.dismiss();
            }
          });

 }

3 个答案:

答案 0 :(得分:0)

两个旋转器需要两个独立的适配器。

您只使用一个...每次进行选择时,适配器会根据您的选择设置您的选择(对于两个微调器,因为每个旋转器都有相同的适配器)。

创建第二个适配器,事情应该更像你期望的那样。

另外,请在onItemSelected方法中尝试此操作(使用您显示的参数名称):

String fromAccount = parent.getItemAtPosition(arg2).toString();

答案 1 :(得分:0)

我认为您必须使用光标来获取所需的String。 Arg2应该是选定的位置。使用它将光标放在右侧数据行,并使用游标的getstring方法从数据库列中获取字符串。

答案 2 :(得分:0)

所以我终于开始工作了。感谢您的建议,我真的很感激他们,但他们并不适合我。我不确定为什么代码不会返回值,因为我尝试它的方式应该适用于其他人。 无论如何,我找到了一种通过使用'Long arg3'来获取我的值的方法。由于它在表中保存值的rowId,因此我使用它来返回微调器中的选择。我发布下面的代码。 再次感谢。

所选微调器的代码:

  spinnerFrom.setOnItemSelectedListener(new OnItemSelectedListener(){
         public void onItemSelected(AdapterView<?> parent, View arg1, int arg2, long arg3) {
             getAccountName(arg3);
             fromAccount = returnAccount;
             }

        public void onNothingSelected(AdapterView<?> arg0) {
             // TODO Auto-generated method stub
         }
        });

这是我写的方法来返回我想要的值。我把它作为一个单独的方法,因为它是从多个微调器使用。代码:

 private void getAccountName(long arg3) {
     if (returnAccount != null){
         returnAccount = null;
     }
        RegisterDbAdapter tAdaptor = new RegisterDbAdapter(this);
        tAdaptor.open();
        Cursor tCursor = tAdaptor.fetchAccount(arg3);
        startManagingCursor(tCursor);
        returnAccount = tCursor.getString(1);
    }