3

편집 할 editText의 결과에 따라 확장 가능 목록 내에서 editText를 자식 카운트 수로 가져 왔습니다. 그러나 EDITTEXT 위치는 항상 다른 또는 childcount 잘못오고오고 나는이 오류 얻을 :android edittext in expandableList 잘못된 색인 및 잘못된 개수?

("java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3")

내 ExpandableListAdapter :

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    public ExpandableListView expandableListView; 
    private ChildViewHolder childViewHolder; 
    private GroupViewHolder groupViewHolder; 
    private Context _context; 
    private ArrayList<BBQrValidateModel.Campaigns> mDataCampaignModel; //stampcount and totalneed 


    public ExpandableListAdapter(ArrayList<BBQrValidateModel.Campaigns> mDataCampaignModel, 
           Context context, ExpandableListView expandableListView) { 
     this._context = context; 
     this.mDataCampaignModel = mDataCampaignModel; 
     this.expandableListView = expandableListView; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosititon) { 
    return campaign.coffeeGiftCount; 
    } 

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

    @Override 
    public View getChildView(int groupPosition, final int childPosition, 
          boolean isLastChild, View convertView, ViewGroup parent) { 
     BBQrValidateModel.Campaigns campaign = mDataCampaignModel.get(groupPosition); 

     if (convertView == null) { 

      convertView = MainActivity.inflater.inflate(R.layout.row_campaign_buy_or_hide, parent, false); 

      childViewHolder = new ChildViewHolder(); 

      childViewHolder.txtCoffeeGift = convertView.findViewById(R.id.txtCoffeeGift); 
      childViewHolder.txtCoffeeHide = convertView.findViewById(R.id.txtCoffeeHide); 
      childViewHolder.txtCoffeeUse = convertView.findViewById(R.id.txtCoffeeUse); 


      convertView.setTag(childViewHolder); 

     } else { 

      childViewHolder = (ChildViewHolder) convertView.getTag(); 
     } 

     childViewHolder.txtCoffeeGift.setText(campaign.prize); 
     //kullan ve sakla tıklanınca modeldekı degısıklıgı buradan yapıcaz 

     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     BBQrValidateModel.Campaigns campaign = mDataCampaignModel.get(groupPosition); 

     return campaign.coffeeGiftCount; 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
    return mDataCampaignModel.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return (mDataCampaignModel == null) ? 0 : mDataCampaignModel.size(); 
    } 

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

    @Override 
    public View getGroupView(final int groupPosition, boolean isExpanded, 
          View convertView, ViewGroup parent) { 
     final BBQrValidateModel.Campaigns campaign = mDataCampaignModel.get(groupPosition); 

     if (convertView == null) { 
      convertView = MainActivity.inflater.inflate(R.layout.row_campaigndetail, parent, false); 

      groupViewHolder = new GroupViewHolder(); 
      groupViewHolder.txtStampCount = convertView.findViewById(R.id.txtStampCount); 
      groupViewHolder.txtCampaignName = convertView.findViewById(R.id.txtCampaignName); 
      groupViewHolder.txtTotalNeeds = convertView.findViewById(R.id.txtTotalNeeds); 
      groupViewHolder.btnFreepProductNum1 = convertView.findViewById(R.id.btnFreepProductNum1); 
      groupViewHolder.btnFreepProductNum2 = convertView.findViewById(R.id.btnFreepProductNum2); 
      groupViewHolder.btnFreepProductNum3 = convertView.findViewById(R.id.btnFreepProductNum3); 
      groupViewHolder.btnFreepProductNum4 = convertView.findViewById(R.id.btnFreepProductNum4); 
      groupViewHolder.btnFreepProductNum5 = convertView.findViewById(R.id.btnFreepProductNum5); 
      groupViewHolder.edtPurchasedCoffeeCount = convertView.findViewById(R.id.edtPurchasedCoffeeCount); 

      convertView.setTag(groupViewHolder); 
     } else { 
      groupViewHolder = (GroupViewHolder) convertView.getTag(); 
     } 

     groupViewHolder.edtPurchasedCoffeeCount.setId(groupPosition); 
     groupViewHolder.txtTotalNeeds.setText(String.valueOf(campaign.totalNeeds)); 
     groupViewHolder.txtStampCount.setText(String.valueOf(campaign.stampCount)); 
     groupViewHolder.txtCampaignName.setText(campaign.description); 

     if (groupViewHolder.edtPurchasedCoffeeCount.getText().toString().isEmpty()) { 
      campaign.edtPurchasedCoffeeCount = 0; 
     } else { 
      campaign.edtPurchasedCoffeeCount = Integer.valueOf(groupViewHolder.edtPurchasedCoffeeCount 
        .getText().toString()); 
     } 

    final int totalneeds = campaign.totalNeeds; 
    final int stampcount = campaign.stampCount; 

    campaign.coffeeGiftCount = (stampcount + campaign.edtPurchasedCoffeeCount)/totalneeds; 

    TextWatcher inputTextWatcher = new TextWatcher() 
    { 
     public void onTextChanged(CharSequence s, int start, int before, int count) 
     { 

      if (stampcount + campaign.coffeeGiftCount > totalneeds) 
      { 

       campaign.coffeeGiftCount = (stampcount + campaign.edtPurchasedCoffeeCount)/totalneeds; 

      } 
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) 
     { 
     } 

     public void afterTextChanged(Editable s) 
     { 
      notifyDataSetChanged(); 

     } 
    }; 
    groupViewHolder.edtPurchasedCoffeeCount.addTextChangedListener(inputTextWatcher); 
    expandableListView.expandGroup(groupPosition); 
    return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return false; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return false; 
    } 

내 ViewHolders (어댑터 내부 클래스) :

public final class GroupViewHolder { 

     TextView txtStampCount; 
     TextView txtCampaignName; 
     TextView txtTotalNeeds; 
     EditText edtPurchasedCoffeeCount; 

     Button btnFreepProductNum1; 
     Button btnFreepProductNum2; 
     Button btnFreepProductNum3; 
     Button btnFreepProductNum4; 
     Button btnFreepProductNum5; 
    } 

    public final class ChildViewHolder { 
     TextView txtCoffeeGift; 
     TextView txtCoffeeUse; 
     TextView txtCoffeeHide; 
    } 

} 

답변

0

getChild 메서드에서 0을 반환하면 해당 자식에 대한 자식 개체가 없으므로 해당 위치에 대한 자식 개체를 반환해야하는 데이터를 그룹화합니다.

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    private Context _context; 
    private List<String> _listDataHeader; // header titles 
    // child data in format of header title, child title 
    private HashMap<String, List<String>> _listDataChild; 

    public ExpandableListAdapter(Context context, List<String> listDataHeader, 
           HashMap<String, List<String>> listChildData) { 
     this._context = context; 
     this._listDataHeader = listDataHeader; 
     this._listDataChild = listChildData; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosititon) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .get(childPosititon); 
    } 

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

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

     final String childText = (String) getChild(groupPosition, childPosition); 

     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_item, null); 
     } 

     EditText edtListChild = (EditText) convertView 
       .findViewById(R.id.lblListItem); 

     txtListChild.setText(childText); 
     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return this._listDataHeader.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return this._listDataHeader.size(); 
    } 

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

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
          View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_group, null); 
     } 

     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.lblListHeader); 
     lblListHeader.setTypeface(null, Typeface.BOLD); 
     lblListHeader.setText(headerTitle); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return false; 
    } 

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

이 코드는 도움이됩니다. 코드에서 방법 아래

+0

난 내 코드를 변경하지만 childcount이 childcount 같은 – enderkoca

+0

https://i.hizliresim.com/Gy21aZ.jpg을 업데이트되지 않습니다 ==> (0이/edtext + 0)/totalneed – enderkoca

0

변경 : 당신이 말한 것처럼

@Override 
    public Object getChild(int groupPosition, int childPosititon) 
    { 
     //return 0; 
     Return value of child here 

    } 

@Override 
    public Object getGroup(int groupPosition) 
    { 
     //return 0; 
     Return value of group here 
    } 
+0

내가 바뀌었지만 edittext가 업데이트되지 않고 childcount가 갱신되지 않음 – enderkoca

+0

https://i.hizliresim.com/Gy21aZ.jpg이 childcount ==> (edttext + 0)/totalneed처럼 – enderkoca

+0

당신은 plz 수 있습니까? 당신의 문제를 더 자세히 설명하십시오 –