Custom Ellipsis in Each List view item Android

352 Views Asked by At

I have implemented a list view where there is a requirement for text view ellipsis in the following format. I have a list of names that is populated on the text view. when its ellipsised, I need to show the remaining number of names as a count.

I have 6 names. When 3 of them are appended, it gets ellipsised; then it will show like this:

name1,name2,name...(+3)

My code:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;

    if (convertView == null) {
        convertView = LayoutInflater.from(parent.getContext()).
                inflate(R.layout.layout_item, parent, false);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    final String nameString = "name1,name2,name3,nam4,name5,nam6,name7";
    ViewTreeObserver viewTreeObserver = holder.nameTextView.getViewTreeObserver();
    if (viewTreeObserver.isAlive()) {
        viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                if (Build.VERSION.SDK_INT < 16) {
                    removeLayoutListenerPre16(holder.nameTextView.getViewTreeObserver(), this);
                } else {
                    removeLayoutListenerPost16(holder.nameTextView.getViewTreeObserver(), this);
                }
                updateEllipsizedText(holder.nameTextView, nameString);

            }
        });
    }

    return convertView;
}


 private void updateEllipsizedText(TextView tv, String text) {
    TextPaint p = tv.getPaint();
    tv.setText(text);
    float avail = tv.getMeasuredWidth();
    String oneMore = "1 more";
    String more = "%d more";
    CharSequence ellipsizedText = TextUtils.commaEllipsize(text, p, avail,
            oneMore, more);
    tv.setText(ellipsizedText);
}

I have tried it with viewtreeobserver in getView of adapter, but it won't work. What can I do?

0

There are 0 best solutions below