2013-01-02 120 views
0

我正在我的DatabaseHelper類中創建一個數據庫。我在這個類中創建了textview,tablerows和tablelayout。我還將tableview和tablerows中的textviews添加到tablelayout。創建TableLayout並從另一個類中調用它 - Android

我的問題是如何從另一個類調用此tablelayout並將其顯示在活動中。我研究了一下,似乎他們希望我寫下面我已經註釋過的代碼行。從註釋掉的行看來,似乎並不像我可以實現那樣,因爲這個類沒有activity/xml文件。

希望我解釋得很好。

public class DatabaseHelper extends SQLiteOpenHelper { 

    Context context;  
    DatabaseHelper dh; 
    SQLiteDatabase db; 

    private static final int DATABASE_VERSION = 1; 
    private static final String DB_NAME = "test3"; 
    private static final String DB_PATH = "/data/data/com.example.test/databases/"; 
    private static final String TABLE = "HighscoresList"; 

    // Table columns names. 
    private static final String RANK = "_id"; 
    private static final String SCORE = "score"; 
    private static final String PERCENTAGE = "percentage"; 

    TableLayout table; 
    TableRow rowHeader, row1, row2, row3, row4, row5, row6, row7, row8, row9, row10; 
    TextView rank, percentage, score; 

    public DatabaseHelper(Context context) { 
     super(context, DB_NAME, null, DATABASE_VERSION); 
     db = getWritableDatabase(); 

     TableRow rowHeader = new TableRow(context); 
     TableRow row1 = new TableRow(context); 
     TableRow row2 = new TableRow(context); 
     TableRow row3 = new TableRow(context); 
     TableRow row4 = new TableRow(context); 
     TableRow row5 = new TableRow(context); 
     TableRow row6 = new TableRow(context); 
     TableRow row7 = new TableRow(context); 
     TableRow row8 = new TableRow(context); 
     TableRow row9 = new TableRow(context); 
     TableRow row10 = new TableRow(context); 

     TextView rank = new TextView(context); 
     TextView percentage = new TextView(context); 
     TextView score = new TextView(context); 
     TextView r1r = new TextView(context); 
     TextView r1p = new TextView(context); 
     TextView r1s = new TextView(context); 

     Cursor c_percentage = db.rawQuery("SELECT " + PERCENTAGE + " FROM " + TABLE + ";", null); 
     Cursor c_score = db.rawQuery("SELECT " + SCORE + " FROM " + TABLE + ";", null); 

     rank.setText("TEST - COLUMN RANK"); 
     percentage.setText("TEST - COLUMN PERCENTAGE"); 
     score.setText("TEST - COLUMN SCORE"); 
     r1r.setText("test..rank"); 
     r1p.setText("teset...percentage"); 
     r1s.setText("test...scoree"); 

     rowHeader.addView(rank); 
     rowHeader.addView(percentage); 
     rowHeader.addView(score); 

     row1.addView(r1r); 
     row1.addView(r1p); 
     row1.addView(r1s); 

     table.addView(rowHeader); 
     table.addView(row1); 
     table.addView(row2); 
     table.addView(row3); 
     table.addView(row4); 
     table.addView(row5); 
     table.addView(row6); 
     table.addView(row7); 
     table.addView(row8); 
     table.addView(row9); 
     table.addView(row10); 

       //table = (TableLayout)contextActivity.findViewById(R.id.tableLayout); 
    } 

      //more methods and code below... 
} 

回答

1

您TableLayout是一個視圖,並且應該只在活動中使用(用於顯示)。因此,將所有與您的TableLayout相關的代碼放入要顯示此表的活動中。使用你的DatabaseHelper類(顧名思義)僅用於訪問數據庫的幫助。因此:

public class DatabaseHelper extends SQLiteOpenHelper { 
    DatabaseHelper dh; 

    private static final int DATABASE_VERSION = 1; 
    private static final String DB_NAME = "test3"; 
    private static final String DB_PATH = "/data/data/com.example.test/databases/"; 
    private static final String TABLE = "HighscoresList"; 

    // Table columns names. 
    private static final String RANK = "_id"; 
    private static final String SCORE = "score"; 
    private static final String PERCENTAGE = "percentage"; 

    public DatabaseHelper(Context context) { 
     super(context, DB_NAME, null, DATABASE_VERSION); 
    } 

    public SQLiteDatabase openDb() { 
     return this.getReadableDatabase(); // Use Readable because you're not actually writing any values into your db 
    } 

    public void closeDb(SQLiteDatabase db) { 
     db.close(); 
    } 

    public Cursor getScore(SQLiteDatabase db) { 
     return db.rawQuery("SELECT " + SCORE + " FROM " + TABLE + ";", null); 
    } 

    public Cursor getPercentage(SQLiteDatabase db) { 
     return db.rawQuery("SELECT " + PERCENTAGE + " FROM " + TABLE + ";", null); 
    } 
} 

現在從你的活動,你可以這樣做:

public class Blah extends Activity { 
    ... 
    public void drawTable() { 
    TableLayout table = (TableLayout)findViewById(R.id.tableLayout); 
    ... // initialize all views as before 
    DatabaseHelper helper = new DatabaseHelper(this); 
    SQLiteDatabase db = helper.openDb(); 

    Cursor scores = helper.getScore(db); 
    Cursor percentages = helper.getPercentage(db); 
    ... // do something with the Cursors 
    .. 
    // finally 
    scores.close(); 
    percentages.close(); 
    helper.closeDb(db); 
    } 
    ... 
} 
+0

代碼結構,在發生什麼每​​一類多少班都需要可能是我最最難處理的事情項目。我會執行你的建議。謝謝! – Matt

相關問題