Список стилей Gmail
Я хочу создать список, похожий по функциональности на приложение Gmail для Android. Под этим я подразумеваю, что вы можете выбрать строки, щелкнув изображение слева или просмотреть электронное письмо, щелкнув в другом месте строки. Я могу приблизиться, но это не совсем так.
Моя пользовательская строка состоит из ImageView слева и некоторых TextViews справа. Вот суть getView на моем адаптере.
@Override public View getView(final int position, View convertView, ViewGroup parent) { View row = super.getView(position, convertView, parent); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getListView().setItemChecked(position, !getListView().isItemChecked(position)); } }); row.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getActivity(), "" + position, Toast.LENGTH_SHORT).show(); } }); }
Это очень близко! Недостаток – это выделение строки в прослушивателе строк.
- Изменение цвета полосы прокрутки в Android
- Как получить выбранные элементы списка из списка с помощью checkbox и пользовательского адаптера?
- Android: как отключить элементы списка при создании списка
- В чем преимущество ViewHolder?
- Android: привязка данных из базы данных к CheckBox в ListView?
- ListView getChildAt возвращает null для видимых детей
- Bubbling прокручивает события из ListView в родительский
- список вложенных списков в Android
- Lazy Загрузка изображений в Listview в Android (уровень начального уровня)?
- CheckBox не проверяется на прокрутку в пользовательском listview
- Как реализовать Android Pull-to-Refresh
- ArrayAdapter.NotifyDataSetChanged () не работает?
- Пользовательская фильтрация на Android с помощью ArrayAdapter
Вариант 1 : используйте встроенную функцию choiceMode
listView. К сожалению, я никогда не реализовывал. Итак, вы не можете дать подробный ответ. Но вы можете взять здесь намек и другие ответы.
Вариант 2 : Внедрите его самостоятельно. Определите array
/ list
или любую рабочую среду, в которой хранятся индексы выбранного элемента вашего списка. А затем используйте его для фильтрации фона в getView (). Вот рабочий пример:
public class TestAdapter extends BaseAdapter { List data; boolean is_element_selected[]; public TestAdapter(List data) { this.data = data; is_element_selected = new boolean[data.size()]; } public void toggleSelection(int index) { is_element_selected[index] = !is_element_selected[index]; notifyDataSetChanged(); } @Override public View getView(int position, View convertView, ViewGroup parent) { //Initialize your view and stuff if (is_element_selected[position]) convertView.setBackgroundColor(context.getResources().getColor(R.color.blue_item_selector)); else convertView.setBackgroundColor(Color.TRANSPARENT); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { toggleSelection(position); } }); row.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //get to detailed view page } }); return convertView; }
Удачи!
Вот как я сделал свой метод getview:
public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; LayoutInflater inflater = (LayoutInflater) context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = inflater.inflate(R.layout.list_item, null); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.title); holder.selectBox = (ImageView) convertView.findViewById(R.id.selectBox); convertView.setTag(holder); } holder = (ViewHolder) convertView.getTag(); holder.title.setText(getItem(position).getTitle()); holder.selectBox.setTag("" + position); holder.selectBox.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ivFlip = (ImageView) v; ivFlip.clearAnimation(); ivFlip.setAnimation(animation1); ivFlip.startAnimation(animation1); setAnimListners(mailList.get(Integer.parseInt(v.getTag().toString()))); } }); if (mailList.get(position).isChecked()) { holder.selectBox.setImageResource(R.drawable.cb_checked); convertView.setBackgroundColor(context.getResources().getColor(R.color.list_highlight)); } else { holder.selectBox.setImageResource(R.drawable.cb_unchecked); convertView.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.list_selector)); } return convertView; } private void setAnimListners(final MyListItem curMail) { AnimationListener animListner; animListner = new AnimationListener() { @Override public void onAnimationStart(Animation animation) { if (animation == animation1) { if (curMail.isChecked()) { ivFlip.setImageResource(R.drawable.cb_unchecked); } else { ivFlip.setImageResource(R.drawable.cb_checked); } ivFlip.clearAnimation(); ivFlip.setAnimation(animation2); ivFlip.startAnimation(animation2); } else { curMail.setIsChecked(!curMail.isChecked()); setCount(); setActionMode(); } } // Set selected count private void setCount() { if (curMail.isChecked()) { checkedCount++; } else { if (checkedCount != 0) { checkedCount--; } } } // Show/Hide action mode private void setActionMode() { if (checkedCount > 0) { if (!isActionModeShowing) { mMode = ((MainActivity) context).startActionMode(new MainActivity.AnActionModeOfEpicProportions(context)); isActionModeShowing = true; } } else if (mMode != null) { mMode.finish(); isActionModeShowing = false; } // Set action mode title if (mMode != null) mMode.setTitle(String.valueOf(checkedCount)); notifyDataSetChanged(); } @Override public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub } }; animation1.setAnimationListener(animListner); animation2.setAnimationListener(animListner); }
И я использовал две анимации:
a) to_middle.xml:
b) from_middle.xml:
Надеюсь, эта ссылка поможет вам: http://techiedreams.com/gmail-like-flip-animated-multi-selection-list-view-with-action-mode/
Вам нужно установить listSelector.
Что вам нужно сделать, чтобы создать listSelector – это xml-шаблон, подобный тому, который был опубликован Karl.
-
-
Как вы можете видеть, tags элементов могут даже использовать атрибут android: drawable, если у вас есть png, который вы хотите использовать, чтобы выделить строку. Ищите все атрибуты, которые эти tags могут предложить и реализуют то, что вам нужно.
Наконец, чтобы убедиться, что ListView использует этот селектор, вы должны установить его внутри макета xml:
или через код:
ListView listView = (ListView) .findViewById(android.R.id.list); listView.setSelector(R.drawable.);
Эта ссылка может помочь вам использовать gmail, например, салфетки и другие анимации
Просмотр списка в списке github
Вы должны установить для параметра ListMode свой ListView.
myListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); myListView().setSelector(android.R.color.BLUE);
Недостаток – это выделение строки в прослушивателе строк.
Похоже, вам нужно пометить строку listview …
-
-
Отсюда: Как выбрать стиль элемента в Android ListView?
Разве это не похоже на какой-то пользовательский список с помощью imagebuttom вместо флажка?