Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Here is one way to do it</p> <p>create a custom ListView ROW layout file with a Separator view. (a Header TextView)</p> <p>listview_row_with_separator.xml</p> <pre><code> &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" &gt; &lt;!-- list Separator TextView Style - the list separator Header--&gt; &lt;TextView style="?android:attr/listSeparatorTextViewStyle" android:id="@+id/textview_header_separator" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@android:color/black" android:text="November, 2012" android:visibility="gone" /&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" &gt; &lt;TextView android:id="@+id/textView_row_value" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="November 12, 2012" android:textAppearance="?android:attr/textAppearanceMedium" &gt; &lt;/TextView&gt; &lt;/LinearLayout&gt; &lt;/LinearLayout&gt; </code></pre> <p><strong>Importent!</strong> Make sure your list is sorted in some way (on dates)</p> <p>extend an ArrayAddapter holding "Your_List_Item" 's and implement a populateView(Your_List_Item) that shows a separator if the next list item is not equal the previous list item.</p> <pre><code>public class Your_List_Adapter extends ArrayAdapter&lt;Your_List_Item&gt; { private Activity mActivity; private String mCurrentMonth = ""; public Your_Adapter(Activity activity) { super(activity, 0); mActivity = activity; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mActivity.getLayoutInflater().inflate( R.layout.listview_row_with_separator, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { // the (list row) convertView is already inflated, so we can get // it from the Tag holder = (ViewHolder) convertView.getTag(); } Your_List_Item your_list_item = getItem(position); //Check if the next list item is not equal the previous list item. if (!mCurrentMonth.equalsIgnoreCase(your_list_item.month.toString())) { holder.populateView(your_list_item, true); mCurrentMonth = your_list_item.date; } else{ holder.populateView(your_list_item, false); } return convertView; } } </code></pre> <p>A ViewHolder class for the adapter displaying the seperator if needed</p> <pre><code>class ViewHolder { /********** DECLARES ************/ private TextView textView_row_value; public TextView textview_header_separator; public ViewHolder(final View root) { /********** INITIALIZES *************/ textview_header_separator = (TextView) root.findViewById(R.id.textview_header_separator); textView_row_value = (TextView) root.findViewById(R.id.textView_row_value); } public void populateView(final Your_List_Item your_list_item,final boolean needSeparator) { /* * add Separator */ if (needSeparator) { //set header text: November, 2012 textview_header_separator.setText(your_list_item.date); textview_header_separator.setVisibility(View.VISIBLE); } else { textview_header_separator.setVisibility(View.GONE); } //set row value: November 12, 2012 textView_row_value.setText(your_list_item.date); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload