I am a new android developer. I have searched google a lot but I didn't get the desired result. I also tried my logic but I didn't get it. If any one can help regarding this, I would be thankful.
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 list of items that contain same month and list out of item within them How can I get this solved? Please suggest some ideas.
Here is one way to do it
create a custom ListView ROW layout file with a Separator view. (a Header TextView)
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 in some way (on dates)
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.
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;
}
}
A ViewHolder class for the adapter displaying the seperator if needed
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);
}
}
If you want having your multiple headers in a list and when you click desired header that list subdates under, so you can use expandable ListView but if you want select your Month outside of your list and then matched dates get listed with selected month you can use
youradapter.setFilterQueryProvider
or you can use textwatcher to filter your list with your desired month
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.