У меня есть собственный ArrayAdapter для моего ListView и я добавил onItemClickListener в ListView.
Пользовательский элемент в ArrayList для ArrayAdapter содержит больше информации, чем показано в ListView. Если пользователь нажимает на элемент, должен появиться CustomItemDetailView.
Но что для этого лучше?
Я мог бы запустить CustomItemDetailView в новом действии или просто изменить ListView с помощью CustomItemDetailView.
Это мой пользовательский ArrayAdapter
public class AuditModuleAdapter extends ArrayAdapter<AuditModule> {
public AuditModuleAdapter(Context context, List<AuditModule> modules){
super(context, 0, modules);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
AuditModule auditModule = super.getItem(position);
if (convertView == null){
convertView = LayoutInflater.from(super.getContext()).inflate(R.layout.audit_module_v2, parent, false);
}
if (auditModule == null) {
return convertView;
}
TextView amName = convertView.findViewById(R.id.am_name);
TextView amMark = convertView.findViewById(R.id.am_mark);
TextView amId = convertView.findViewById(R.id.am_auditId);
TextView amCresits = convertView.findViewById(R.id.am_credits);
ImageView imageView = convertView.findViewById(R.id.am_icon);
amName.setText(auditModule.getName());
amCresits.setText(String.valueOf(auditModule.getCredits()));
imageView.setImageResource(auditModule.getStatus().getIconId());
imageView.setColorFilter(auditModule.getStatus().getColor() );
amId.setText(String.valueOf(auditModule.getId()));
if (auditModule.getMark() == Double.MAX_VALUE){
amMark.setText("-.-");
} else {
amMark.setText(String.valueOf(auditModule.getMark()));
}
return convertView;
}
}
Вот OnItemClickListener для ListView
public class AuditModuleClickListener implements AdapterView.OnItemClickListener {
private Context context;
public AuditModuleClickListener(Context context) {
this.context = context;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
// Here what to do ??
}
}
Вот фрагмент кода из MainAcitiviy:
List<AuditModule> auditModules = new ArrayList<>();
AuditModuleAdapter auditModuleAdapter = new AuditModuleAdapter(this, auditModules);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(auditModuleAdapter);
listView.setOnItemClickListener(new AuditModuleClickListener(this));