2012-02-04 4 views
0

電話でSQLiteデータベースに保存されたデータから生成される一連のリストビューがあります。私は列「X」からリストビューを作成したいSQLiteのカラム項目をグループ化する(Android)

__________________________________________ 
| ID |  X | Y |  Z | 
|________|__________|_________|__________| 
| 1 | ABC | 123 | B94 | 
| 2 | ABC | 234 | C33 | 
| 3 | DEF | 567 | N72 | 
| 4 | DEF | 789 | K12 | 
|________|__________|_________|__________|... 

、およびクリックされたとき、新しいリストビューでの行に関連付けられた列「Y」でデータを開きます。表は次のようになりますと言うことができますトリッキーな部分は、各列の同じ項目をリストビューでグループ化したいということです。この例では、最初のリストビューには2つの項目「ABC; DEF」しかなく、「ABC」をクリックすると、次のリストビューに「123; 234」項目が表示されます。

HERESに私のコード(はい、私はチュートリアルからのほとんどを修正!):

listviewactivity.java

public class listviewactivity extends Activity {  
private SQLiteAdapter mySQLiteAdapter; 
ListView listContent; 
SimpleCursorAdapter cursorAdapter; 
Cursor cursor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.expenses); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    listContent = (ListView)findViewById(R.id.contentlist); 
    mySQLiteAdapter = new SQLiteAdapter(this); 
    mySQLiteAdapter.openToWrite();   

    cursor = mySQLiteAdapter.queueAll(); 
    String[] from = new String[]{SQLiteAdapter.KEY_ID, SQLiteAdapter.KEY_CONTENT1, SQLiteAdapter.KEY_CONTENT2}; 
    int[] to = new int[]{R.id.id, R.id.text1, R.id.text2}; 
    cursorAdapter = 
    new SimpleCursorAdapter(this, R.layout.row, cursor, from, to); 
    listContent.setAdapter(cursorAdapter);  


} 

@Override 
protected void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    mySQLiteAdapter.close(); 
} 
} 

SQLiteAdapter.java

public class SQLiteAdapter { 
public static final String MYDATABASE_NAME = "MY_DATABASE"; 
public static final String MYDATABASE_TABLE = "MY_TABLE"; 
public static final int MYDATABASE_VERSION = 1; 
public static final String KEY_ID = "_id"; 
public static final String KEY_CONTENT1 = "Content1"; 
public static final String KEY_CONTENT2 = "Content2"; 
public static final String KEY_CONTENT3 = "Content3"; 
public static final String KEY_CONTENT4 = "Content4"; 
public static final String KEY_CONTENT5 = "Content5"; 
public static final String KEY_CONTENT6 = "Content6"; 
public static final String KEY_CONTENT7 = "Content7"; 
public static final String KEY_CONTENT8 = "Content8"; 

private static final String SCRIPT_CREATE_DATABASE = 
"create table " + MYDATABASE_TABLE + " (" 
+ KEY_ID + " integer primary key autoincrement, " 
+ KEY_CONTENT1 + " text not null, " 
+ KEY_CONTENT2 + " text not null," 
+ KEY_CONTENT3 + " text not null, " 
+ KEY_CONTENT4 + " text not null," 
+ KEY_CONTENT5 + " text not null, " 
+ KEY_CONTENT6 + " text not null," 
+ KEY_CONTENT7 + " text not null," 
+ KEY_CONTENT8 + " text not null);"; 

private SQLiteHelper sqLiteHelper; 
private SQLiteDatabase sqLiteDatabase; 
private Context context; 
public SQLiteAdapter(Context c){ 

context = c; 

} 

public SQLiteAdapter openToRead() throws android.database.SQLException { 
sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION); 
sqLiteDatabase = sqLiteHelper.getReadableDatabase(); 
return this; 

} 

public SQLiteAdapter openToWrite() throws android.database.SQLException { 
sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION); 
sqLiteDatabase = sqLiteHelper.getWritableDatabase(); 
return this; 

} 

public void close(){ 
sqLiteHelper.close(); 
} 

public long insert(String content1, String content2, String content3, 
       String content4, String content5, String content6, 
          String content7, String content8){ 

ContentValues contentValues = new ContentValues(); 
contentValues.put(KEY_CONTENT1, content1); 
contentValues.put(KEY_CONTENT2, content2); 
contentValues.put(KEY_CONTENT3, content3); 
contentValues.put(KEY_CONTENT4, content4); 
contentValues.put(KEY_CONTENT5, content5); 
contentValues.put(KEY_CONTENT6, content6); 
contentValues.put(KEY_CONTENT7, content7); 
contentValues.put(KEY_CONTENT8, content8); 

return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues); 
} 

public int deleteAll(){ 
return sqLiteDatabase.delete(MYDATABASE_TABLE, null, null); 
} 
public Cursor queueAll(){ 
String[] columns = new String[]{KEY_ID, KEY_CONTENT1, KEY_CONTENT2, KEY_CONTENT3, 
           KEY_CONTENT4, KEY_CONTENT5, KEY_CONTENT6, 
             KEY_CONTENT7, KEY_CONTENT8}; 

Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns, 
null, null, null, null, null, null); 
    return cursor; 

} 

public class SQLiteHelper extends SQLiteOpenHelper { 
public SQLiteHelper(Context context, String name, 
CursorFactory factory, int version) { 
super(context, name, factory, version); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 
// TODO Auto-generated method stub 
db.execSQL(SCRIPT_CREATE_DATABASE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
// TODO Auto-generated method stub 
    } 

    } 

} 

だから、この基本的に基本的には、カーソルをアルistview。誰かが私のOnItemClickListenerを手伝ったり、列項目をまとめてグループ化したりすれば、それはすばらしいことになります!

答えて

1

あなたは、例えばABC

ですべてに結果を制限する新しいlistadaperを設定する必要があります:

Cursor c = sqlLiteDatabase.query(MYDATABASE_TABLE, 
new String[] {KEY_ID,COLUMN_Y}, 
COLUMN_X + "=" + ITEM_IN_COLUMN_X_CLICKED, 
null,null,null); 

キーはあなたとすべての項目を照会するクエリでwhere、ありますアイテムがクリックされたCOLUMN_X + "=" + ITEM_IN_COLUMN_X_CLICKED

あなたがABCをクリックした場合ので、新しいリストは、この作品が、私はちょうど今、グループ同様の列の項目への道を必要とする、あなたに感謝column x

+0

ABCcolumn yのすべてを持ち出すだろう! – 725623452362

関連する問題