問題があります。データベースからグループと子を呼び出すメソッドを実装しました。すべてを展開可能リストに入れた後、それまではすべてが正常で、すべてのデータが期待どおりに出力されました。
しかし、子をクリックして onChildClick メソッドに Toast メッセージを呼び出すと、Toast は子ではなくグループを表示します (グループも間違っています)。
覚えておいてください:展開可能なリストの出力は正しく出てきました
これは展開可能なリストでアクティブです:
public class ShowDeckActivity extends ExpandableListActivity {
/** Called when the activity is first created. */
@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.carddeck);
try{
SimpleExpandableListAdapter expListAdapter =
new SimpleExpandableListAdapter(
this,
createGroupList(),
R.layout.group_row,
new String[] { "Group Item" },
new int[] { R.id.row_name },
createChildList(),
R.layout.child_row,
new String[] {"Sub Item"},
new int[] { R.id.grp_child}
);
setListAdapter( expListAdapter );
}catch(Exception e){
System.out.println("Errrr +++ " + e.getMessage());
}
}
@SuppressWarnings("rawtypes")
private List createGroupList(){
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
return db.getGroupList();
}
@SuppressWarnings("rawtypes")
private List createChildList(){
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
return db.getChildList();
}
public boolean onChildClick( ExpandableListView parent, View v, int groupPosition,int childPosition,long id) {
String nameLable = parent.getItemAtPosition(childPosition).toString();
// Debug
// System.out.println("Inside onChildClick at groupPosition = " + (groupPosition + 1) +" Child clicked at position " + (childPosition + 1));
Toast.makeText(getApplicationContext(), nameLable, Toast.LENGTH_SHORT).show();
return true;
}
}
これは私の DatabaseHandler メソッドです:
public List getGroupList() {
String SQL = "SELECT * FROM assunto";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(SQL, null);
int numeroColunas = cursor.getCount();
ArrayList result = new ArrayList();
if(cursor.moveToFirst()){
do{
HashMap m = new HashMap();
m.put( "Group Item", cursor.getString(2) );
result.add( m );
}while(cursor.moveToNext());
}
cursor.close();
db.close();
return (List)result;
}
//@SuppressWarnings({ "unchecked", "rawtypes" })
public List getChildList(){
String sqlAssunto = "SELECT * FROM assunto";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursorAssunto = db.rawQuery(sqlAssunto, null);
ArrayList result = new ArrayList();
if(cursorAssunto.moveToFirst()){
do { // Loop begin 1
String assuntoID = cursorAssunto.getString(0);
String sqlDeck = "SELECT * FROM deck WHERE table_assuntos_id=" + assuntoID;
Cursor cursorDeck = db.rawQuery(sqlDeck, null);
ArrayList secList = new ArrayList();
if(cursorDeck.moveToFirst()){ // Move-se nos decks
do {
// Loop Begin 2
HashMap child = new HashMap();
child.put( "Sub Item", cursorDeck.getString(2) );
secList.add( child );
} while (cursorDeck.moveToNext()); // Loop end 2
}
result.add( secList );
} while (cursorAssunto.moveToNext()); // Loop end 1
}
cursorAssunto.close();
db.close();
return result;
}
展開可能なリストの出力(期待どおりです):
GROUP1
- SUB ITEM1_1
- SUB ITEM1_2
- SUB ITEM1_3
GROUP2
- SUB ITEM2_1
- SUB ITEM2_2
GROUP3
- SUB ITEM3_1
GROUP4
[..]
例: (GROUP3 x SUB ITEM3_1) をクリックした場合
間違ったトースト メッセージは次のとおりです。
{Group Item= GROUP1}
...期待される代わりに:
{Sub Item=SUB ITEM3_1}
何が起こったのか知っている人はいますか?前もって感謝します!
==================[編集、解決策を見つけました]======================== =
この問題を解決するには、次のような ExpandableListAdapter をインスタンス化する必要があります。
ExpandableListAdapter adap = parent.getExpandableListAdapter();
String adaptar = adap.getChild(groupPosition, childPosition).toString(); // This get the correct child name
手伝ってくれてありがとう!