2017-01-10 4 views
1

Ich habe ähnliche 5-Klasse. Jede Klasse "Code", "Name" -Eigenschaft. Ich verwende einen benutzerdefinierten Adapter, um sie aufzulisten, und ich möchte einen Adapter für alle verwenden. Ist das möglich ?Dynamische Art von Arraylist und benutzerdefinierte Adapter

Ich Marmelade da drin: holder.txtCode.setText (list.get (Position) .getCode() ????); halter.txtName.setText (list.get (position) .getName() ?????);

public class AdapterCodeName extends BaseAdapter { 
    private static ArrayList<?> list; 
    private static ArrayList<?> listOrj; 
    private static ArrayList<?> mOriginalValues; 
    private LayoutInflater mInflater; 
    public AdapterCodeName (Context context, ArrayList<?> results){ 
     list = results; 
     listOrj = results; 
     mInflater = LayoutInflater.from(context); 
    } 
    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return list.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return i; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if(convertView == null){ 
      convertView = mInflater.inflate(R.layout.row_code_name, null); 
      holder = new ViewHolder(); 
      holder.txtCode = (TextView) convertView.findViewById(R.id.txtCode); 
      holder.txtName = (TextView) convertView.findViewById(R.id.txtName); 

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


     holder.txtCode.setText(list.get(position).getCode() ????); 
     holder.txtName.setText(list.get(position).getName() ?????); 

     return convertView; 
    } 
    static class ViewHolder{ 
     TextView txtCode,txtName; 
    } 

Antwort

0

alle Klassen von einer Klasse (Schnittstelle) erstrecken, und erstellen Sie Adapter mit Liste von Objekten des Basistyp/Schnittstelle:

public interface Item { 
    String getName(); 
    String getCode(); 
} 


public class ListItem1 implements Item { 
    private String name; 
    private String code; 

    @Override 
    public getName() { 
     return name; 
    } 

    @Override 
    public getCode() { 
     return code; 
    } 
} 

public class ListItem2 implements Item { 
    private String name; 
    private String code; 
    private String somethingElse; 

    @Override 
    public getName() { 
     return name; 
    } 

    @Override 
    public getCode() { 
     return code; 
    } 
} 

in Adapter:

private static ArrayList<? extends Item> list; 

@Override 
public Item getItem(int i) { 
    return list.get(i); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ... 

    holder.txtCode.setText(list.get(position).getCode()); 
    holder.txtName.setText(list.get(position).getName()); 

    return convertView; 
} 
Verwandte Themen