2016-12-18 65 views
0

私はexpandablelistiview子に最初のボタンと2番目にView.GONEの2つを持っています。最初のボタンを変更して2番目のボタンの可視性を表示させようとしましたが、機能しません。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()は、実装する必要のあるメソッドです。最初に、行レベルをボタン状態にマップするクラス・レベルの変数、たとえばhashmapを作成します。その後、メソッドを介して値を取得および設定したり、ハッシュマップに直接アクセスしたりします。自分自身を実装しようとすると、学習に役立ちます – Aaqib

関連する問題