2010-12-21 8 views
0

SimpleCursorAdapterを使用して2つのスピナーをデータベースに正常にリンクすることができました。しかし、私は、第2のスピナーの選択を第1のスピナーの選択に依存させる必要があります。ここでSQLiteデータベースを使用した動的スピナー

は、私は、データをリンクする方法である:ここでは

public class epa_estimates_button extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.epa_estimates); 
    final Cursor cYear; 
    final Cursor cMake; 
    final Spinner mMakeSpinner; 
    final Spinner mModelSpinner; 
    cYear = (Cursor) DataBaseHelper.getEPADataYear(); 
    this.startManagingCursor(cYear); 

    SimpleCursorAdapter scaYear = new SimpleCursorAdapter(this, R.layout.spinner_layout,cYear,new String[] {DataBaseHelper.EPA_COLUMN_ONE},new int[]{R.id.text1}); 
    scaYear.setDropDownViewResource(R.layout.spinner_dropdown); 
    mYearSpinner = (Spinner) findViewById(R.id.yearSpinner); 
    mYearSpinner.setAdapter(scaYear); 

    cMake = (Cursor) DataBaseHelper.getEPADataMake(); 
    this.startManagingCursor(cMake); 

    SimpleCursorAdapter scaMake = new SimpleCursorAdapter(this, R.layout.spinner_layout,cMake,new String[] {DataBaseHelper.EPA_COLUMN_TWO},new int[]{R.id.text1}); 
    scaMake.setDropDownViewResource(R.layout.spinner_dropdown); 
    mMakeSpinner = (Spinner) findViewById(R.id.makeSpinner); 
    mMakeSpinner.setAdapter(scaMake); 
}} 

は私のDataBaseHelper

public class DataBaseHelper extends SQLiteOpenHelper { 
private static String DB_PATH = "/data/data/org.application.ocdmpg/databases/"; 
private static String DB_NAME = "ocd_mpg.mp3"; 
private final int DB_VERSION = 1; 
private static SQLiteDatabase myDataBase; 
private final Context myContext; 
private static final String EPA_TABLE_NAME = "epa_data"; 
private static final String EPA_COLUMN_ID = "_id"; 
public DataBaseHelper(Context context) { 

    super(context, DB_NAME, null, 1); 
    this.myContext = context; 
} 
    public static Cursor getEPADataYear() 
{ 
    return myDataBase.query(EPA_TABLE_NAME, //table name 
      new String[] {EPA_COLUMN_ID, EPA_COLUMN_ONE}, //list of columns to return 
      null, //filter declaring which rows to return; formatted as SQL WHERE clause 
      null, 
      EPA_COLUMN_ONE, //filter declaring how to group rows; formatted as SQL GROUP BY clause 
      null, //filter declaring which row groups to include in cursor; formatted as SQL HAVING clause 
      null); //how to order rows; formatted as SQL ORDER BY clause 
} 
public static Cursor getEPADataMake() 
{ 
    return myDataBase.query(EPA_TABLE_NAME, new String[] { 
      EPA_COLUMN_ID, 
      EPA_COLUMN_TWO, 
      }, 
      null, 
      null, 
      EPA_COLUMN_TWO, 
      null, 
      null); 
}} 

は私がsetOnItemSelectedListenerのコードを発見し、スピナーにデータをリンクするための私のコードを追加しようとしましたですstartManagingCursorメソッドとSimpleCursorAdapterコンストラクタは私に未定義のエラーを返します。 ArrayAdapterを使用してスピナーを設定する必要がありますか?または、以下のコードを修正する方法はありますか?

 mYearSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
      // your code here 
      cMake = (Cursor) DataBaseHelper.getEPADataMake(); 
      this.startManagingCursor(cMake); 

      SimpleCursorAdapter scaMake = new SimpleCursorAdapter(this, R.layout.spinner_layout,cMake,new String[] {DataBaseHelper.EPA_COLUMN_TWO},new int[]{R.id.text1}); 
      scaMake.setDropDownViewResource(R.layout.spinner_dropdown); 
      mMakeSpinner = (Spinner) findViewById(R.id.makeSpinner); 
      mMakeSpinner.setAdapter(scaMake); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parentView) { 
      // your code here 
     } 

     }); 

答えて

1

あなたの編集に基づいてを更新し、それが内部クラス(OnItemSelectedListener)内から行われていますので、this.startManagingCursor(cMake)ニーズへのあなたの呼び出しは、startManagingCursor(cMake)epa_estimates_button.this.startManagingCursor(cMake)のいずれかに変更する

をコメントしています。基本的には、Javaが何を意味するのかを把握しているので、これは「これ」(前者の場合)なしで動作します。thisそれはJavaがそれ自身のために考え出したであろうものを明示するので、classnameと一緒に働きます。しかし、未修飾のthisは、内部クラスthisを参照していることを意味し、それは動作しません。

は非常によく似た、あなたのonItemSelectedListenerで、startManagingCursorニーズにお電話をのように書き換えることにする:

SimpleCursorAdapter scaMake = new SimpleCursorAdapter(epa_estimates_button.this, 
    R.layout.spinner_layout,cMake,new String[] {DataBaseHelper.EPA_COLUMN_TWO}, 
    new int[]{R.id.text1}); 

(私はあなたのデータベースクエリが作業を必要としていると思う - あなたは任意の並べ替えを使用していないようですWHERE句を使用して 'make'の結果を適切な年に制限することができますが、それに固執しても別の質問として投稿してください)

+0

startManagingCursorメソッドはアクティビティにあります。私が定義した方法ではありません。私はそれを作ってみましたActivity.this.startManagingCursor(cMake)と動作しません。そのためのエラーは、「範囲内でアクティビティ型のインスタンスを取り囲むことはできません」 – Eric

+0

SimpleCursorAdapterのエラーは「コンストラクタSimpleCursorAdapter(new AdapterView.OnItemSelectedListener(){、int、Cursor、String []、int [])が定義されていません " – Eric

+0

また、アンドロイドのドキュメントによると、onItemClickListenerはSpinnerではサポートされていません。そのため、私はOnItemSelectedListenerを使用しています。 – Eric

関連する問題