0

2つのスピナーがカーソルに接続されているダイアログ設定があります。私はこのサイトの助けを借りていくつかの問題を解決しましたが、この点を乗り越えることができないようです。私が見つけたものはすべて、私がすでに試したことです。問題は、スピナーの選択をクリックするか、[送信]をクリックしてダイアログを終了すると、スピナーの値が本来あるべき値ではないことです。いくつかのコードでパッケージ名を取得しています。スピナーから文字列を取得しようとしています.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

だから私はついにそれを機能させることができました。提案をありがとう、私は本当にそれらに感謝します、しかしそれらは私のために働きませんでした。私が試した方法はおそらく他の人にも役立つので、コードが値を返さない理由はわかりません。とにかく、「Longarg3」を使用して値を取得する方法を見つけました。テーブル内の値の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

必要な文字列を取得するには、カーソルを使用する必要があると思います。Arg2を選択する必要があります。これを使用してカーソルを右側のデータ行に置き、カーソルのgetstringメソッドを使用してデータベース列から文字列を取得します。

于 2012-12-21T01:57:09.390 に答える
0

2つのスピナー用に2つの別々のアダプターが必要です。

使用しているのは1つだけです...選択を行うたびに、アダプターは選択を選択に設定します(それぞれをサポートする同じアダプターがあるため、両方のスピナーに対して)。

2つ目のアダプターを作成すると、期待どおりに機能するはずです。

また、onItemSelected(表示するパラメーター名を使用して)メソッドでこれを試してください。

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