2016-12-18 4 views
0

expandablelistiview 자식에 buttons이 있고 첫 번째 버튼이 View.VISIBLE이고 다른 하나가 View.GONE입니다. 첫 번째 버튼이 두 번째 버튼 가시성이 변경되도록 변경하려고했지만 작동하지 않습니다.expandablelistview 하위 요소에있는 버튼을 숨기는 버튼

getchildview 방법 :

당신이 버튼의 상태를 유지하지 않기 때문에 귀하의 코드가 작동하지 않는
@Override 
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, 
    ViewGroup parent) { 

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

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

    buttonOff = (Button) convertView.findViewById(R.id.button_off); 

    buttonOff.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      buttonOff.setVisibility(View.GONE); 
      buttonTest.setVisibility(View.VISIBLE); 
     } 
    }); 

    buttonTest = (Button) convertView.findViewById(R.id.button_test); 
    buttonTest.setVisibility(View.GONE); 

    buttonTest.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      buttonTest.setVisibility(View.GONE); 
      buttonOff.setVisibility(View.VISIBLE); 
     } 
    }); 

    TextView listChildText = (TextView) convertView.findViewById(R.id.list_item); 

    listChildText.setText(childText); 

    return convertView; 
} 

답변

0

. 모든 행에 대해 버튼 상태를 초기화합니다. 그런 다음 getView() 메서드가 호출 될 때마다 먼저 상태를 확인하고 그에 따라 표시 할 버튼을 설정할 수 있습니다. 버튼을 클릭하면 해당 행의 상태를 업데이트해야합니다. 아래 코드는 그 방향으로 당신을 인도 할 수 있습니다 :

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

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

    // get visibility status of the first button 
    final boolean buttonOffVisible = getFirstButtonVisibility(groupPosition, childPosition); 

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

    buttonOff = (Button) convertView.findViewById(R.id.button_off); 

    buttonOff.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // set the state of the first button 
      setFirstButtonVisibility(groupPosition, childPosition, false); // false denoting as GONE 

      buttonOff.setVisibility(View.GONE); 
      buttonTest.setVisibility(View.VISIBLE); 
     } 
    }); 

    buttonTest = (Button) convertView.findViewById(R.id.button_test); 
    // buttonTest.setVisibility(View.GONE); <-- remove this line 

    buttonTest.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // set the state of the first button 
      setFirstButtonVisibility(groupPosition, childPosition, true); // true denoting as VISIBLE 

      buttonTest.setVisibility(View.GONE); 
      buttonOff.setVisibility(View.VISIBLE); 
     } 
    }); 

    // depending upon the visibility status of first button, make one of the two visible 
    if(buttonOffVisible) { 
     buttonOff.setVisibility(View.VISIBLE); 
     buttonTest.setVisibility(View.GONE); 
    } 
    else { 
     buttonOff.setVisibility(View.GONE); 
     buttonTest.setVisibility(View.VISIBLE); 
    } 

    TextView listChildText = (TextView) convertView.findViewById(R.id.list_item); 

    listChildText.setText(childText); 

    return convertView; 
} 
+0

답변을 주셔서 감사합니다. 그러나 초보자로서 getFirstButtonVisibility()는 무엇입니까? – LastR

+0

getFirstButtonVisibility() 및 setFirstButtonVisibility()는 구현해야하는 메서드입니다. 먼저 행 레벨을 버튼 상태로 매핑하는 클래스 레벨 변수 인 해시 맵을 만듭니다. 그런 다음 메서드를 통해 값을 가져오고 해시 맵에 직접 액세스하십시오. 자신을 구현하려고하면 배우는 데 도움이됩니다. – Aaqib

관련 문제