2015-05-26 4 views
1

Я пытаюсь создать ExpandableListView, который я сделал раньше, и я знаю, что он перерабатывает представления, но я пытаюсь получить представление окончательным и не изменять. Когда я выбираю групповой вид, чтобы развернуть представление, групповой просмотр иногда меняет текст другого группового представления.Изменения в расширенныхListView изменениях групп, когда они выбраны в Android

Пожалуйста, кто-то может посмотреть мой код и посмотреть, что я делаю неправильно.

public class ClientListAdapter extends BaseExpandableListAdapter 
{ 
private Context context; 
private List<Client> listOfClients; 

public ClientListAdapter(Context context, List<Client> listOfClients) 
{ 
    this.context = context; 
    this.listOfClients = listOfClients; 
} 

private static class ViewHolder 
{ 
    TextView name; 
    TextView ID; 
    TextView email; 
    TextView phoneNumber; 
    Button writeToNFC; 
} 

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

@Override 
public int getChildrenCount(int groupPosition) 
{ 
    return 1; // There will only ever be 1 child in the group. 
} 

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

@Override 
public Object getChild(int groupPosition, int childPosition) 
{ 
    return null; 
} 

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

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

@Override 
public boolean hasStableIds() 
{ 
    return true; // Stops child views from resetting. 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
{ 
    final ViewHolder viewHolder; 

    if(convertView == null) 
    { 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = layoutInflater.inflate(R.layout.unexpanded, parent, false); 

     viewHolder = new ViewHolder(); 
     viewHolder.name = (TextView) convertView.findViewById(R.id.ClientName); 

     viewHolder.name.setText(listOfClients.get(groupPosition).getName()); 

     System.out.println("Group name: " + listOfClients.get(groupPosition).getName()); 

     convertView.setTag(viewHolder); 
    } 
    else 
    { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    return convertView; 
} 

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

    if(convertView == null) 
    { 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = layoutInflater.inflate(R.layout.client_details, parent, false); 

     viewHolder = new ViewHolder(); 

     convertView.setTag(viewHolder); 
    } 
    else 
    { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    viewHolder.ID = (TextView) convertView.findViewById(R.id.ClientID); 
    viewHolder.email = (TextView) convertView.findViewById(R.id.ClientEmail); 
    viewHolder.phoneNumber = (TextView) convertView.findViewById(R.id.ClientTel); 
    viewHolder.writeToNFC = (Button) convertView.findViewById(R.id.WriteToNFC); 

    viewHolder.ID.setText(listOfClients.get(groupPosition).getClientID()); 
    viewHolder.email.setText(listOfClients.get(groupPosition).getEmail()); 
    viewHolder.phoneNumber.setText(listOfClients.get(groupPosition).getPhoneNumber()); 

    viewHolder.writeToNFC.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      MainActivity mainActivity = (MainActivity) context; 

      String ndefMessage = viewHolder.ID.getText().toString(); 

      mainActivity.setNdefMessage(ndefMessage); 

      Toast.makeText(context, "Client details selected.", Toast.LENGTH_SHORT).show(); 

      System.out.println("NDEF message: " + ndefMessage); 
     } 
    }); 

    System.out.println("Group position: " + groupPosition); 
    System.out.println("Child position: " + childPosition); 

    return convertView; 
} 

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

} 

ответ

2

На самом деле мне просто удалось исправить ошибку. То, что я должен был сделать, это поставить функции viewHolder.name вне если заявления так:

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
{ 
    final ViewHolder viewHolder; 

    if(convertView == null) 
    { 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = layoutInflater.inflate(R.layout.unexpanded, parent, false); 

     viewHolder = new ViewHolder(); 

     System.out.println("Group name: " + listOfClients.get(groupPosition).getName()); 

     convertView.setTag(viewHolder); 
    } 
    else 
    { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    viewHolder.name = (TextView) convertView.findViewById(R.id.ClientName); 

    viewHolder.name.setText(listOfClients.get(groupPosition).getName()); 

    return convertView; 
} 
1

Использования ниже методов Override из BaseExpandableListAdapter

public int getChildType(int groupPosition, int childPosition) { 
//define a condition here to differentiate between your child views. 
} 

public int getChildTypeCount() { 
    return 2; <-- this is the number of views for your child 
} 

Надеется, что это поможет.

Смежные вопросы