Я думаю, что вам нужен новый RecyclerView, который был недавно добавлен в библиотеку поддержки. Доступно простое введение here.
RecyclerView особенно полезен, поскольку он не имеет onItemClickListener
. Люди склонны спрашивать: «Но почему у него нет?»
На самом деле это действительно разумно, именно из-за вашего прецедента: он не украл ваш фокус на кликабельные элементы (как вы знаете, ListView делает это), и вместо этого каждое событие click делегируется дочерним пользователям onClickListener
s.
Пример из указанной ссылке (источник блог Антонио Лейва):
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
private List<ViewModel> items;
private int itemLayout;
public MyRecyclerAdapter(List<ViewModel> items, int itemLayout) {
this.items = items;
this.itemLayout = itemLayout;
}
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
return new ViewHolder(v);
}
@Override public void onBindViewHolder(ViewHolder holder, int position) {
ViewModel item = items.get(position);
holder.text.setText(item.getText());
holder.image.setImageBitmap(null);
Picasso.with(holder.image.getContext()).cancelRequest(holder.image);
Picasso.with(holder.image.getContext()).load(item.getImage()).into(holder.image);
holder.itemView.setTag(item);
}
@Override public int getItemCount() {
return items.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView image;
public TextView text;
public ViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.image);
text = (TextView) itemView.findViewById(R.id.text);
}
}
}
Где на add
и remove
:
public void add(ViewModel item, int position) {
items.add(position, item);
notifyItemInserted(position);
}
public void remove(ViewModel item) {
int position = items.indexOf(item);
items.remove(position);
notifyItemRemoved(position);
}
И инициализации:
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
recyclerView.setHasFixedSize(true); // use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
recyclerView.setAdapter(new MyRecyclerAdapter(list, R.layout.item));
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
Req Uires зависимость:
dependencies {
...
compile 'com.android.support:recyclerview-v7:21.0.+'
}
новый 'RecyclerView' в библиотеке поддержки звучит как-то, что это именно то, что вам нужно: http://antonioleiva.com/recyclerview/ – EpicPandaForce
как об удалении редактирования из списка? сделать его текстовым полем и либо добавить кнопку редактирования, либо щелкнуть всплывающее диалоговое окно для редактирования. –
@EpicPandaForce: только что реализованный с использованием RecycleView, и он работает потрясающе! Благодаря! Не уверен, как дать вам кредит на ответ, так как он в комментарии. – wislo