Android Listview 标题和部分月份和日期列表

标签 android android-layout android-emulator

我是一名新的安卓开发者。我在谷歌上搜索了很多,但我 没有得到想要的结果。我也试过我的逻辑,但我没有明白。如果有人可以对此提供帮助,我将不胜感激。

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

我的问题是如何获取包含相同月份和列表的项目列表 其中的项目我怎样才能解决这个问题?请提出一些想法。

最佳答案

这里有一个方法可以做到这一点

创建一个带有分隔符 View 的自定义 ListView ROW 布局文件。 (标题 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>

重要!确保您的列表以某种方式(按日期)排序

扩展一个包含“Your_List_Item”的 ArrayAddapter 并实现一个 populateView(Your_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 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);

 }
}

关于Android Listview 标题和部分月份和日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14017742/

相关文章:

使用具有多个条件的 if else 语句的 android 应用程序

java - Recyclerview 中已经设置了 OnFlingListener 的一个实例

android - Firebase Jobdispatcher - 现在开始并重复

android - 任何模拟器上都没有互联网连接

android - 当软键盘出现时,它使我的 EditText 字段失去焦点

java - 如何检查字符串列表是否包含特定值?

java - Android:继承的 View 比例

android - FragmentPagerAdapter 和 PagerAdapter 的区别

android - 多 Pane 布局

android - HTC Nexus 模拟器