2011-09-21 26 views
0

我無法在expandablelistview中使用自定義佈局來工作,只需點擊兒童孩子即可刷新。刷新expandablelistview的整個父項

在該示例中,您具有MyExpandableListAdapter - > getChildView方法,其中子代充滿自定義佈局R.layout.list_out_item(什麼是文本瀏覽和按鈕)。

現在我想要的是,如果我點擊一個按鈕,該子視圖的父級更新。我怎樣才能做到這一點?我正在考慮刷新父母和孩子,因爲崩潰迫使更新,但也歡迎其他解決方案。

有關示例

public class Sample extends ExpandableListActivity { 
    ExpandableListAdapter mAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Set up our adapter 
     mAdapter = new MyExpandableListAdapter(); 
     setListAdapter(mAdapter); 

    } 
} 

public class MyExpandableListAdapter extends BaseExpandableListAdapter { 
    private Map<Ability, Integer> abilityMods; 
    private List<Skill> skills = SkillList(); 

    private List<Skill> SkillList() { 
     List<Skill> skills = new Vector<Skill>(); 

     abilityMods = Player.getAbilityModifier(); 

     skills.add(new Skill(abilityMods, "Appraise", 2, Ability.Dex, 2)); 
     skills.add(new Skill(abilityMods, "Autohypnosis", 0, Ability.Int, 
       -7)); 
     skills.add(new Skill(abilityMods, "Craft", 0, Ability.Dex, 0)); 

     return skills; 

    } 

    public MyExpandableListAdapter() { 
     super(); 
     abilityMods = Player.getAbilityModifier(); 
    } 

    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    public int getChildrenCount(int groupPosition) { 
     return 1; 
    } 


    public View getChildView(int groupPosition, int childPosition, 
      boolean isLastChild, View convertView, final ViewGroup parent) { 

     LayoutInflater infalInflater = getLayoutInflater(); 
     convertView = infalInflater.inflate(R.layout.list_out_item, null); 

     final Skill skill = getChild(groupPosition, childPosition); 

     TextView tv = (TextView) convertView.findViewById(R.id.abilityMod); 
     tv.setText(toString(skill.abillityMod())); 

     Button rankMod = (Button) convertView.findViewById(R.id.rankMod); 
     rankMod.setText(toString(skill.Ranks)); 


     rankMod.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       skill.Ranks++; 
      } 
     }); 

     return convertView; 
    } 

    private String toString(int value) { 
     if (value >= 0) 
      return ("+" + String.valueOf(value)); 
     else 
      return (String.valueOf(value)); 
    } 

    public Skill getGroup(int groupPosition) { 
     return skills.get(groupPosition); 
    } 

    @Override 
    public Skill getChild(int groupPosition, int childPosition) { 
     return getGroup(groupPosition); 
    } 

    public int getGroupCount() { 
     return skills.size(); 
    } 

    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     LayoutInflater infalInflater = getLayoutInflater(); 
     convertView = infalInflater 
       .inflate(R.layout.list_header_item, null); 

     TextView skillName = (TextView) convertView 
       .findViewById(R.id.skillName); 
     Skill skill = getGroup(groupPosition); 

     TextView skillPower = (TextView) convertView 
       .findViewById(R.id.skillPower); 
     int TotalMod = skill.TotalModifier(); 

     if (TotalMod >= 0) 
      skillPower.setText("+" + String.valueOf(TotalMod)); 
     else 
      skillPower.setText(String.valueOf(TotalMod)); 

     return convertView; 
    } 

    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 

    public boolean hasStableIds() { 
     return true; 
    } 

} 
+0

我的猜測是parentview.invalidate(); – blessenm

+0

太糟糕了,它不起作用:( –

+0

您是否嘗試notifyDataSetChanged? 或使用'invalidateviews()'而不是invalidate() –

回答

0

參見this鏈接定製BaseExpandableListViewAdapter。使用List<View>存儲父視圖,當點擊btn時,獲取父視圖並操作視圖。