2014-09-27 2 views
0

2 개의 그룹으로 구성된 사용자 정의 확장 가능 목록보기가 있습니다. 첫 번째 그룹을 확장하면 모든 것이 잘됩니다. 하지만 두 번째 그룹을 확장하면 첫 번째 그룹의 콘텐츠가 다시 표시됩니다. 내가 어떻게 고칠 수 있을까 ??조각에서 ExpandableListView는 어떻게 작동합니까?

public class MiCuentaActivity extends Fragment { 


    Usuario user; 

    ExpandableListAdapter listAdapter; 
     ExpandableListView expListView; 
     List<String> listDataHeader; 
     HashMap<String, List<HistorialOferta>> listDataChild; 
     HashMap<String, List<HistorialOferta>> listWonSubastas; 


    public MiCuentaActivity(Usuario user) { 
     // TODO Auto-generated constructor stub 
     this.user=user; 
    } 

    public MiCuentaActivity(){ 

    } 

    @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 

      View rootView = inflater.inflate(R.layout.activity_mi_cuenta, container, false); 

      //StrictMode.enableDefaults(); 

      expListView= (ExpandableListView) rootView.findViewById(R.id.listaExpan); 

      expListView.setOnGroupExpandListener(new OnGroupExpandListener() { 

       @Override 
       public void onGroupExpand(int arg0) { 
        // TODO Auto-generated method stub 
        Toast.makeText(getActivity(), arg0+" expandeed", Toast.LENGTH_SHORT).show(); 
       } 
      }); 

      new TareaSync().execute(new ApiConnector("cuenta", this.user)); 

      return rootView; 
     } 




    private class TareaSync extends AsyncTask<ApiConnector, Void, HashMap<String, List<HistorialOferta>>>{ 

     @Override 
     protected HashMap<String, List<HistorialOferta>> doInBackground(ApiConnector... params) { 
      // TODO Auto-generated method stub 
      listDataHeader=new ArrayList<String>(); 
      listDataChild=new HashMap<String, List<HistorialOferta>>(); 

      //ApiConnector api=new ApiConnector("cuenta", this.user); 
      List<HistorialOferta> ofertas=params[0].getCuenta(); 
      List<HistorialOferta> lstWon=params[0].getWon(); 

      listDataHeader.add("Historial Ofertas"); 
      listDataHeader.add("Subastas Ganadas"); 



      listDataChild.put(listDataHeader.get(0), ofertas); 
      listDataChild.put(listDataHeader.get(1), lstWon); 

      return listDataChild; 

     } 

     @Override 
     protected void onPostExecute(HashMap<String, List<HistorialOferta>> list) { 
      // TODO Auto-generated method stub 
      setListAdapter(list); 
     } 

     private void setListAdapter(HashMap<String, List<HistorialOferta>> list) { 
      // TODO Auto-generated method stub 
      expListView.setAdapter(new ExpandableList(getActivity().getApplicationContext(), listDataHeader, list)); 
     } 




    } 
} 

어댑터 :

@Override 
public Object getChild(int arg0, int arg1) { 
    // TODO Auto-generated method stub 
    return this.listOfertas.get(this._listDataHeader.get(arg0)).get(arg1); 
} 


@Override 
    public View getChildView(int groupId, int childId, boolean arg2, 
      View convertView, ViewGroup arg4) { 
     // TODO Auto-generated method stub 

     HistorialOferta ho = (HistorialOferta) getChild(groupId, childId); 

     TableLayout table; 

     if (convertView == null) { 

      if(groupId==0){ 

      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater 
        .inflate(R.layout.list_expand_item, null); 

      table = (TableLayout) convertView.findViewById(R.id.maintable); 

      } 

      if(groupId==1){ 

       LayoutInflater infla=(LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

       convertView=infla.inflate(R.layout.list_expand_won_item, null); 

       table=(TableLayout) convertView.findViewById(R.id.maintableWon); 

      } 



} 


return convertView; 




     } 
+0

조각과 관련이 있다고 생각합니까? 왜? 어떤 코드에서 동일한 코드를 시도 했습니까? – greenapps

+0

예 활동과 동일한 것을 시도하고 모든 것이 잘 작동합니다. –

답변

0

This might help you out.

또한, 당신은 당신이 실제로 모든 것을 다시 확인해야하므로 ListView의에서, 뷰, 나중에 재활용 것을 알고있다. ViewHolder 패턴을 사용하면 도움이됩니다. Google은 더 많은 예제를 찾기 위해 용어를 사용합니다.

당신은 또한 당신의 HistorialOferta 객체는 당신이 필요로하는 두 개의 레이아웃 값을 잡고, 그래서 대신 if(groupId==0) 코드를 사용하여, 당신은 같은 것을 말할 수 그것을 할 수 : 또한

convertView = infalInflater.inflate(ho.getViewId(), null) 
table = (TableLayout) convertView.findViewById(ho.getTableViewID()); 

을, 당신은 실제로 아무것도 할 수 없다 너의 convertView은보기를 팽창시키는 것을 제외하고는; 너 의도 한거야?

+0

나는 getChildView 메소드를 이미 debbuged했고 문제는 여기에 있습니다 : HistorialOferta ho = (HistorialOferta) getChild (** groupId **, childId); ** groupId는 두 번째 그룹을 확장 할 때 1 대신 **라고 말합니다. 그래서 두 번째 그룹에서 첫 번째 그룹의 동일한 데이터를 볼 수 있습니다. –

관련 문제