0

我已经完成了我能找到的每一个堆栈讨论,以及大约十几个教程。我只是不明白。我正在使用“getItemViewType”来确定我应该使用哪种布局。这是我遇到问题的地方(也许我获得职位的方式是根本问题,不确定):

我正在做的是在位置 x 处获取联系人姓名的第一个字符。如果它与位置 x-1 中的第一个字符不同,我知道它是列表中的下一个字母,它需要一个节标题,它将插入当前列表项的上方。如何让我的适配器在位置 x-1 添加新布局?

这是我的适配器代码。我已经剥离了导致应用程序强制关闭的代码,这让我只剩下 1 个布局。我不知道如何在位置 x-1 插入“部分”布局。在我为我的 2 个布局放入 xml 的适配器代码下方。需要帮助请叫我。提前致谢。

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ContactNameAdapter extends BaseAdapter {

    public static final int CONTACT_NAME = 0;
    public static final int ALPHA_HEADER = 1;
    private static final int NUMBER_OF_LAYOUTS = 2;
    Context context;
    private ArrayList<ListItemDetails> sItemDetailsArrayList;

    public ContactNameAdapter(ArrayList<ListItemDetails> data, Context context) {

        sItemDetailsArrayList = data;
        this.context = context;
    }

    @Override
    public int getCount() {
        return sItemDetailsArrayList.size();
    }

    @Override
    public ListItemDetails getItem(int position) {
        return sItemDetailsArrayList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getViewTypeCount() {
        return NUMBER_OF_LAYOUTS;
    }

    @Override
    public int getItemViewType(int position) {
        if (position != 0) {
            if (getItem(position).getName().toUpperCase().charAt(0) == getItem(
                    position - 1).getName().toUpperCase().charAt(0)) {
                return CONTACT_NAME;
            } else {
                return ALPHA_HEADER;
            }
        } else {
            return ALPHA_HEADER;
        }
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {

        ImageView mImageView;
        TextView mTextView;
        if (view == null) {
            LayoutInflater layoutInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.contactlistlayout, null);

            mImageView = (ImageView) view.findViewById(R.id.ivContactPhoto);
            mTextView = (TextView) view.findViewById(R.id.textView1);

            view.setTag(new ViewHolder(mImageView, mTextView));
        } else {
            ViewHolder viewHolder = (ViewHolder) view.getTag();
            mImageView = viewHolder.mImageView;
            mTextView = viewHolder.mTextView;
        }
        ListItemDetails listItemDetails = getItem(position);
        mTextView.setText(listItemDetails.getName());
        mImageView.setImageBitmap(listItemDetails.getImage());
        if (listItemDetails.getImage() == null) {
            mImageView.setImageResource(R.raw.default_contact);
        }
        return view;
    }

    private static class ViewHolder {

        public final TextView mTextView;
        public final ImageView mImageView;

        public ViewHolder(ImageView mImageView, TextView mTextView) {

            this.mImageView = mImageView;
            this.mTextView = mTextView;
        }
    }
}

列表布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/contactView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="visible" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:paddingLeft="2dp"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <ImageView
        android:id="@+id/ivContactPhoto"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false" />

</RelativeLayout>

板块布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layoutView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvAlphaHeader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:paddingBottom="10dp"
        android:paddingLeft="2dp"
        android:paddingTop="10dp"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <ImageView
        android:id="@+id/ivSectionLine"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@android:color/holo_blue_light"
        android:focusable="true" />

</LinearLayout>
4

1 回答 1

0

我看过一堆教程,这些教程最终让我感到困惑而不是帮助我,但我发现这个很棒。如果你像我一样周游世界,看看这个教程:)

http://codelikes.blogspot.com/2012/04/android-alphabet-listview-like-contacts.html?zx=d40863f078ab91b4

于 2013-07-09T00:21:27.053 回答