2013-07-18 2 views
0

저는 Android 프로그래밍에 익숙하지 않아 마녀가 DataBase의 ListView를 채울 가장 적절한 방법이라고 생각합니다. 여기에 내가 데이터베이스에 사용하고 방법 내 항목 안드로이드의 데이터베이스에서 ListView를 채우십시오.

// Getting All stats 
public List<StatParcours> getAllSats() { 
     List<StatParcours> statList = new ArrayList<StatParcours>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_STATS; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       StatParcours stat = new StatParcours(); 
       stat.setID(Integer.parseInt(cursor.getString(0))); 
       stat.setDate(cursor.getString(1)); 
       stat.setDuration(cursor.getString(2)); 
       stat.setDistance(Double.parseDouble(cursor.getString(3))); 
       stat.setSpeed(Double.parseDouble(cursor.getString(4))); 
       stat.setCondition(cursor.getString(5)); 

       // Adding contact to list 
       statList.add(stat); 
      } while (cursor.moveToNext()); 
     } 

     // return contact list 
     return statList; 
} 

을 얻을하고, 주요 활동, 나는이 사용하고 있습니다. populateMyStatsList 메서드에 문제가 있음을 알고 있지만 여전히 해결 방법을 모르겠습니다.

public class History extends Activity { 
public DatabaseHandler db; 
private List<StatParcours> MyStats = new ArrayList<StatParcours>();  
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Log.i("oncreate", "ok"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.history); 
    populateMyStatsList(); 
    populateListView(); 
    registerClickCallback(); 


} 
    private void populateMyStatsList(){ 
     MyStats = db.getAllSats(); 

    } 
    private void populateListView() { 
     ArrayAdapter<StatParcours> adapter = new MyListAdapter(); 
     ListView list = (ListView) findViewById(R.id.HistListView); 
     list.setAdapter(adapter); 
     Log.i("Populate", "ok"); 
    } 
    private void registerClickCallback() { 
     ListView list = (ListView) findViewById(R.id.HistListView); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View viewClicked, 
        int position, long id) { 

       StatParcours clickedCar = MyStats.get(position); 
       String message = "You clicked position " + position 
           + " Which is car make " + clickedCar.getDate(); 
       Toast.makeText(History.this, message, Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 
    private class MyListAdapter extends ArrayAdapter<StatParcours> { 
     public MyListAdapter() { 
      super(History.this, R.layout.item_view, MyStats); 
      Log.i("MyListAdapter", "ok"); 
     } 



     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      View itemView = convertView; 
      if (itemView == null) { 
       Log.i("Make sure", "ok"); 
       itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false); 
      } 
      Log.i("getview", "ok"); 

      StatParcours currentStat = MyStats.get(position);   

      TextView makeText = (TextView) itemView.findViewById(R.id.item_txtMake); 
      makeText.setText(currentStat.getDate()); 


      TextView yearText = (TextView) itemView.findViewById(R.id.item_txtYear); 
      yearText.setText("" + currentStat.getDistance()); 


      TextView condionText = (TextView) itemView.findViewById(R.id.item_txtCondition); 
      condionText.setText(currentStat.getCondition()); 

      return itemView; 
     } 
    } 


} 
+0

이 SimpleCursorAdapter –

+0

를 사용해야 당신은 제발 어떻게 그렇게 말해 주시겠습니까? –

+0

가능한 복제 http://stackoverflow.com/questions/17674178/how-to-load-listview-contents-from-sqlitedatabase-in-android/17674448#17674448 – DynamicMind

답변

0

SimpleCursor Adapter를 사용해야합니다. 설명서의 개발자 사이트에 연결할 수 없지만 위의 코드 예는 다음과 같습니다.

편집 : 다음은 Android 개발자 웹 사이트 링크입니다.

http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html

SECOND 편집 : 당신은 당신의 ListView에 텍스트 뷰를 가지고 있기 때문에 이것은 populateListView (에 갈 것이라고는)

// Select All Query 
String selectQuery = "SELECT * FROM " + TABLE_STATS; 
SQLiteDatabase db = this.getWritableDatabase(); 
Cursor cursor = db.rawQuery(selectQuery, null); 

// Set your layout to int[] 
int[] to = new int[]{R.id.item_txtMake,R.id.item_txtYear,R.id.item_txtCondition}; 

//set your columns to string[]; fill in your actual column names 
string[] from = new string[]{"make","year","condition"}; 

//set up adapter 
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(),R.layout.item_view, cursor, from,to,null); 

//set adapter to listview 
ListView list = (ListView) findViewById(R.id.HistListView); 
    list.setAdapter(adapter); 
0

당신은 단지 SimpleCursorAdapter를 사용할 수 있습니다.

// Getting All stats 
public Cursor getAllSats() { 
    List<StatParcours> statList = new ArrayList<StatParcours>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_STATS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    return db.rawQuery(selectQuery, null); 
} 

그리고 당신의 역사 클래스

public class History extends Activity { 
public DatabaseHandler db; 
private List<StatParcours> MyStats = new ArrayList<StatParcours>();  
@Override 
protected void onCreate(Bundle savedInstanceState) { 
Log.i("oncreate", "ok"); 
super.onCreate(savedInstanceState); 
setContentView(R.layout.history); 

Cursor c = getAllSats(); 
String[] fromColumns = {Your database column name for date, 
          Your database column name for distance, 
          Your database column name for condition}; 
    int[] toViews = {R.id.item_txtMake, 
        R.id.item_txtYear, 
        R.id.item_txtCondition}; 
    adapter = new SimpleCursorAdapter(this, R.layout.item_view, 
             c, fromColumns, toViews, 0); 
    ListView list = (ListView) findViewById(R.id.HistListView); 
    list.setAdapter(adapter); 
registerClickCallback(); 


} 
관련 문제