List of Android List headers and sections of the month and date

I am a new Android developer. I searched google many times, but I did not get the desired result. I also tried my logic, but I did not understand this. If anyone can help with this, I would be grateful.

1. My problem is that ______________ November,2012 //This is header ______________ November 12,2012 November 15,2012 //This list of date that contain in month _____________ December,2012 //This is header _____________ December 23,2012 December 30,2012 //This list of date that contain in month 

My question is how to get a list of items that contain one month and a list of an item inside them. How can I solve this problem? Please suggest some ideas.

+4
source share
2 answers

Here is one way to do it.

Create your own ListView ROW layout file with Separator view. (TextView header)

listview_row_with_separator.xml

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- list Separator TextView Style - the list separator Header--> <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" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <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" > </TextView> </LinearLayout> </LinearLayout> 

Importent! Make sure your list is sorted somehow (by date)

extend the ArrayAddapter by holding "Your_List_Item" and implement a populateView (Your_List_Item) that shows the separator if the next list item is not equal to the previous list item.

 public class Your_List_Adapter extends ArrayAdapter<Your_List_Item> { 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; } } 

ViewHolder class for an adapter that displays the separator if necessary

 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); } } 
+3
source

If you want to have several headings in the list and when you click on the desired heading, which includes sub-tables, so you can use the extensible ListView, but if you want to select a month outside your list, then the corresponding dates will be listed in the selected month, you can use

 youradapter.setFilterQueryProvider 

or you can use textwatcher to filter your list with the desired month

0
source

All Articles