0

Android では、getChildView()関数で Expandible List のいくつかの子行を操作しようとしていますが、次のコードは正しく動作しないようです:

@Override
public View getChildView(int groupPosition, int childPosition,
    boolean isLastChild, View convertView, ViewGroup parent) {
        View childRow = inflater.inflate(R.layout.buslinescheduleitem, null);
        if(childPosition%4==0) {
            int k = 0;
            TextView textView;
            while((childPosition+k) < getChildrenCount(groupPosition) && k < 4){
                textView= (TextView) childRow.findViewById(textViewIds[k]);
                textView.setText(getChild(groupPosition, childPosition+k));
                k++;
            }
            childRow.setVisibility(View.VISIBLE);
        }
        else { childRow.setVisibility(View.GONE); }
        return childRow;
}

一部の子行は Visibility GONE で変更されており、ビューは表示されていませんが、groupView には本来あるべきではない場所に「穴」があります (あたかもこの行に INVISIBLE 値の Visibility があるかのように)。展開可能なリストが作成されたときに、一部の子行を非表示にすることはできますか?

4

1 に答える 1

0

修理済み。4行ごとに1行だけを作成しました。

@Override
public View getChildView(int groupPosition, int childPosition,
    boolean isLastChild, View convertView, ViewGroup parent) {
    View childRow = inflater.inflate(R.layout.buslinescheduleitem, null);
        int k = 0;
        TextView textView;
        while(((childPosition*NUMBER_ROWS)+k) < getChildrenSize(groupPosition) && k < NUMBER_ROWS){
            textView= (TextView) childRow.findViewById(textViewIds[k]);
            textView.setText(getChild(groupPosition, (childPosition*NUMBER_ROWS)+k));
            k++;
        }
        while(k < NUMBER_ROWS){
            textView= (TextView) childRow.findViewById(textViewIds[k]);
            textView.setVisibility(View.GONE);
            k++;
        }
        return childRow;    
}

@Override
public int getChildrenCount(int groupPosition) {
    // TODO Auto-generated method stub
    if(!isInverted) return (int) Math.ceil((float)busLine.getBusScheduleRound().get(groupPosition).getHours().size()/(float)NUMBER_ROWS);
    else return (int) Math.ceil((float)busLine.getBusScheduleReturn().get(groupPosition).getHours().size()/(float)NUMBER_ROWS);
}

public int getChildrenSize(int groupPosition){
    if(!isInverted) return busLine.getBusScheduleRound().get(groupPosition).getHours().size();
    else return busLine.getBusScheduleReturn().get(groupPosition).getHours().size();        
}

それにもかかわらず、私は可視性の変更を達成していません。

于 2012-04-25T23:45:41.517 に答える