0

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

这是本节的代码。最后,这些值将进入一个文本视图。显示的值为“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();
            }
          });

 }
4

3 回答 3

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);
    }
于 2012-12-22T02:11:38.573 回答
0

您需要两个单独的适配器用于两个微调器。

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

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

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

String fromAccount = parent.getItemAtPosition(arg2).toString();
于 2012-12-20T04:26:53.310 回答
0

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

于 2012-12-21T01:57:09.390 回答