我有一个对话框设置,其中有两个旋转器连接到游标。我在这个网站的帮助下解决了一些问题,但我似乎无法克服这一点。我发现的一切都是我已经尝试过的东西。
问题是,当我单击微调器选择或单击“提交”退出对话框时,微调器值不是它应该的值。我正在使用一些代码获取包名称。我试图通过.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();
}
});
}
答案 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);
}