Список стилей 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(); } }); } 

Это очень близко! Недостаток – это выделение строки в прослушивателе строк.

Вариант 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 вместо флажка?

            
  • Buggy ListView меня огорчает
  • notifyDataSetChange не работает с пользовательским адаптером
  • Android listview с проблемой флажка
  • c # мерцающий список в обновлении
  • пользовательский шрифт в android ListView
  • Динамический список в приложении Android
  • ANDROID: разделить экран на 2 равных части с 2 списками
  • не может нажимать на строку listview с помощью кнопки изображения
  • Использование библиотеки Picasso с ListView
  • Android ListView Divider
  • Автоматический вызов checkbox onCheckedChange при прокрутке списка?
  • Interesting Posts

    «Плохо» использовать try-catch для управления streamами в .NET?

    Рекомендации по сериализации объектов в пользовательский строковый формат для использования в выходном файле

    CoffeeScript, Когда использовать стрелку жира (=>) над стрелкой (->) и наоборот

    scala: memoize функция независимо от того, сколько аргументов функция принимает?

    Что делает маленький squiggly ~ в Linux?

    Как ограничить время доступа в Интернет на Mac адрес

    Подключите маршрутизатор к другому беспроводному маршрутизатору

    Загрузка MySQL дампа из командной строки

    models.py становится огромным, что является лучшим способом разбить его?

    Какие внутренние команды cmd.exe очищают ERRORLEVEL до 0 при успешном завершении?

    Как просмотреть IP-адрес другой страны?

    Используют ли методы по умолчанию Java 8 по умолчанию?

    OpenSouce C / C ++ Математический синтаксический анализатор библиотеки

    Получить JSONArray без имени массива?

    Как получить IMEI на iPhone?

    Давайте будем гением компьютера.