1

問題があります。データベースからグループと子を呼び出すメソッドを実装しました。すべてを展開可能リストに入れた後、それまではすべてが正常で、すべてのデータが期待どおりに出力されました。

しかし、子をクリックして 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

手伝ってくれてありがとう!

4

0 に答える 0