2014-08-29 3 views
0

데이터베이스에서 검색 한 데이터에서 Android 스피너를 채우려고합니다. 나는 회에 데이터를 바인딩하려고 코드 여기Android Spinner를 동적으로 채우기

private ArrayList<CategoryModel> catList = new ArrayList<CategoryModel>(); 
public ArrayList <CategoryModel> getAllCatName() { 
    try { 
     String sql = "SELECT categoryName FROM category"; 
     Cursor mCur = mDb.rawQuery(sql, null); 
     Log.e(TAG, "Data Grab Success"); 
     if (mCur.getCount() != 0) { 
      if (mCur.moveToFirst()) { 
       do { 
        CategoryModel cm = new CategoryModel(); 
        cm.setCategoryName((mCur.getString(mCur 
          .getColumnIndex("categoryName")))); 

        catList.add(cm); 
       } while (mCur.moveToNext()); 
      } 
     } 
     return catList; 
    } catch (SQLException mSQLException) { 
     throw mSQLException; 
    } 
} 

그리고 :

spinnerCat = (Spinner) dialogView.findViewById(R.id.spinnerCat); 

    ArrayList<CategoryModel> cat_list = cc.getAllCatName(); 
    ArrayAdapter<CategoryModel> adapterFrom = new ArrayAdapter<CategoryModel>(this, 
      android.R.layout.simple_spinner_item, cat_list) { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = super.getView(position, convertView, parent); 

      // Get item at position 
      CategoryModel catModel = getItem(position); 
      // Set textview's value with the category name 
      TextView textView = (TextView) view.findViewById(android.R.id.text1); 
      textView.setText(catModel.getCategoryName()); 

      return view; 
     } 
    }; 

    adapterFrom.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinnerCat.setAdapter(adapterFrom); 

그리고 내 엔티티 클래스 :

public String categoryName; 
public String getCategoryName() { 
    return categoryName; 
} 

public void setCategoryName(String categoryName) { 
    this.categoryName = categoryName; 
} 
다음은 데이터를 검색하기 위해 내 SQL 문이다

그러나 지금 문제는 내가 검색 한 첫 번째 항목이 정상적으로 작동하는 것 같습니다. 그러나 회 전자의 다음 항목은이 형식으로 나타났습니다 [email protected]. 왜 그런지 궁금해.

미리 감사드립니다.

편집

DatabaseAdapter mDbHelper = new DatabaseAdapter(this); 
    mDbHelper.createDatabase(); 
    mDbHelper.open(); 
    CategoryController cc = new CategoryController(
      mDbHelper.open()); 

    Cursor cursor = cc.getAllCatName(); 
    if(cursor.getCount()>0){ 
      String[] from = new String[]{"categoryName"}; 
      // create an array of the display item we want to bind our data to 
      int[] to = new int[]{android.R.id.text1}; 
      SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, 
      cursor, from, to); 
      mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinnerCat.setAdapter(mAdapter); 
      } 

그리고 내 SQL 문 방법 :

public Cursor getAllCatName() { 
    try { 
     String sql = "SELECT categoryName FROM category"; 
     Cursor mCur = mDb.rawQuery(sql, null); 
     Log.e(TAG, "Data Grab Success"); 
     if (mCur.getCount() != 0) { 
      if (mCur.moveToFirst()) { 
       do { 
        CategoryModel cm = new CategoryModel(); 
        cm.setCategoryName((mCur.getString(mCur 
          .getColumnIndex("categoryName")))); 

        catList.add(cm); 
       } while (mCur.moveToNext()); 
      } 
     } 
     return mCur; 
    } catch (SQLException mSQLException) { 
     throw mSQLException; 
    } 
} 

그리고 새로운 오류 메시지가 열 _id가 존재하지 않는 것입니다. 아무데도 _id를 선언하지 않은 이유는 무엇인지 모르겠습니다.

+0

스피너 객체 루프 –

+0

에 mulipal 때 만들어가 (I = 0을 나타내는 int i가() cat_list.size를 <; 내가 ++) { adapterFrom = 새로운 ArrayAdapter와 (이, android.R.layout.simple_spinner_item, cat_list.get (i) .getCategoryName()); adapterFrom.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item); spinnerCat.setAdapter (adapterFrom); }이 줄의 문제점 –

+0

예,하지만 회 전자에 개체를 추가하는 방법을 모르겠습니다. 너는 어떤 생각을 가지고 있니? –

답변

1
ArrayList<String> Temp = new ArrayList<String>(); 
for (int i = 0; i < cat_list.size(); i++) 
{ 
    Temp.add(cat_list.get(i).getCategoryName()); 
} 

adapterFrom = 새로운 ArrayAdapter와 (이, android.R.layout.simple_spinner_item, 텍스트 뷰의 ID, 온도); adapterFrom.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_ite m);
spinnerCat.setAdapter (adapterFrom);

spinnerCat.setOnItemSelectedListener 
    (new OnItemSelectedListener() 
     { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, 
       View view, int position, long id) 
     { 
      Toast.makeText(getApplicationContext(), ""+position, Toast.LENGTH_LONG).show(); 
      Toast.makeText(getApplicationContext(), ""+Temp.get(position), 
      Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      // TODO Auto-generated method stub 

     } 
    }); 
+0

죄송 합니다만 textView의 ID는 무엇을 의미합니까? 나는 나와 함께 textview가 없다. –

+0

감사. 그것은 작동합니다! 그러나 선택한 항목의 위치를 ​​얻으려는 아이디어가 있습니까? –

+0

업데이트 코드를 확인하시기 바랍니다 –

1

배열 (cat_list)에 맞춤 개체가 포함되어 있으므로 맞춤 어댑터가 필요합니다.

ArrayAdapter<CategoryModel> adapterFrom = new ArrayAdapter<CategoryModel>(this, 
     android.R.layout.simple_spinner_item, cat_list) { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 

     // Get item at position 
     CategoryModel catModel = getItem(position); 
     // Set textview's value with the category name 
     TextView textView = (TextView) view.findViewById(android.R.id.text1); 

     textView.setText(catModel.getCategoryName()); 

     return view; 
    } 
}; 

adapterFrom.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinnerCat.setAdapter(adapterFrom); 
+0

하지만이 코드를 사용하면 정확한 기록을 하나만 반환합니다. 나머지 레코드는 [email protected]과 같습니다. 너는 어떤 생각을 가지고 있니? –

+0

'cat_list'의 아이템이'getCategoryName()'을 호출 할 때 적절한 String을 리턴합니까? 질문을 현재 사용중인 코드로 업데이트하십시오. – Simas

+0

@ user324977 질문을 편집했습니다. 좀 봐 주시겠습니까? –

관련 문제