2013-10-03 107 views
4

我有一個ListView動態添加行項目。每一行都有一個孩子。現在我設置點擊這些孩子的聽衆,並在他們要求我保持這些子項最終,它與他們正常工作,這是可以做到這一點,因爲我在每個點擊監聽器中創建一個類。如何獲得ListView的重點兒童?

這裏是免費的是一個最終的複選框。

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     // TODO Auto-generated method stub 
     if (isFree.isChecked()){...} 
    } 
}); 

但我不覺得這是一個良好的編程習慣,我想使用一些功能,這應檢測點擊了哪個孩子的話,我應該能夠使用的getParent訪問其行,然後使用getChildAt其兄弟項目(指數) 所以,我用這個:

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     // TODO Auto-generated method stub 
     CheckBox tv=(CheckBox) getCurrentFocus(); 
     TableRow row = (TableRow)tv.getParent(); 
     TextView tv1=(TextView) row.getChildAt(5); 
     if (tv.isChecked()){...} 
    } 
}); 

但是當我使用它,在聚焦項目actualy返回列表視圖,但我想在該行中焦點項。

回答

0

你可以通過onItemClickListener獲得哪個listview子項被點擊,但是如果你想對某個行有一些複選框或其他可點擊的視圖,並且你想對這些點擊執行一些操作,那麼我認爲你必須在這些視圖本身上使用點擊監聽器。

但是,如果您希望單擊這些單獨視圖時獲得listitem行,則可以使用view類的setTag方法存儲索引,然後從您的點擊偵聽器的該索引獲取行項目。

public view getView(int position, View convertView, ..) { 
    .... 
    .... 
    .... 
    // your code 
    convertView.setTag(position); 
    return convertView; 
} 

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     // TODO Auto-generated method stub 
     if (arg0.isChecked()){ 
      int index = arg0.getTag(); 
      View v = listview.getItemAtPosition(index); 
      // or get the adapter get data list from it and then index it. 

     } 
    } 
}); 

請注意:我沒有使用最終免費的oncheckedchange方法。

0

setOnCheckedChangeListener方法中,第一個參數是CompoundButton,它是超級類別CheckBox。所以,實際上,arg0是你的複選框。用它來檢索父列表項並製作你的東西。

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     // TODO Auto-generated method stub 
     TableRow row = (TableRow)arg0.getParent(); 
     TextView tv1=(TextView) row.getChildAt(5); 
     if (arg0.isChecked()){...} 
    } 
});