在android中,如果列表视图中的行超过2行,如何添加显示更多
我是android新手。我在在android中,如果列表视图中的行超过2行,如何添加显示更多,android,listview,button,row,Android,Listview,Button,Row,我是android新手。我在列表视图中有一个普通的文本视图作为列表项。如果一行有3行以上的文本,我必须在列表视图中向该行动态添加一个按钮 我已经尝试过android中的ViewTreeObserver和OnPreDrawListener函数。但它不起作用,因为只有在呈现所有列表项之后,才会调用ViewTreeObserver。因此,ViewTreeObserver仅在最后一项上被调用 请帮帮我!我有麻烦了 以下是我编写的代码: @Override public View getView(int
列表视图
中有一个普通的文本视图
作为列表项。如果一行有3行以上的文本,我必须在列表视图中向该行动态添加一个按钮
我已经尝试过android中的ViewTreeObserver
和OnPreDrawListener
函数。但它不起作用,因为只有在呈现所有列表项之后,才会调用ViewTreeObserver
。因此,ViewTreeObserver
仅在最后一项上被调用
请帮帮我!我有麻烦了
以下是我编写的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = inflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.review = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
convertView1 = convertView;
}
holder = (ViewHolder) convertView.getTag();
item = reviews.get(position);
Log.d("position",""+position);
holder.review.setText(item.getReview());
mViewTreeObserver = holder.review.getViewTreeObserver();
mViewTreeObserver.addOnPreDrawListener(onPreDrawListener);
return convertView;
}
OnPreDrawListener onPreDrawListener = new OnPreDrawListener()
{
@Override
public boolean onPreDraw()
{
System.out.println("Line Count is : " + holder.review.getLineCount());
noOfLines = holder.review.getLineCount();
if (noOfLines > 3)
{
int lineEndIndex = holder.review.getLayout().getLineEnd(2);
String text = holder.review.getText().subSequence(0, lineEndIndex - 3) + "...";
holder.review.setText(text);
mReadMoreButton = new Button(context);
RelativeLayout ll = (RelativeLayout) convertView1.findViewById(R.id.layout);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.BELOW, holder.review.getId());
ll.addView(mReadMoreButton, lp);
mReadMoreButton.setText("Readmore");
mReadMoreButton.setId(5);
mReadMoreButton.setOnClickListener(onReadMoreClickListener);
}
return true;
}
在这里,我使用以下代码解决了这个问题。它对我很有效 @凌驾 公共视图getView(int位置、视图转换视图、视图组父视图) {
if(convertView==null)
{
convertView=充气机。充气(R.layout.list_项,空);
holder=新的ViewHolder();
holder.review=(TextView)convertView.findViewById(R.id.text);
convertView.setTag(支架);
布局[位置]=转换视图;
}
holder=(ViewHolder)convertView.getTag();
item=评论。get(位置);
长度=位置;
Log.e(“内部getView”,即“+holder”);
Log.e(“item”,“item+item.getReview());
国际单项体育联合会(旗)
{
holder.review.setText(item.getReview());
}
arr[职位]=持有人审核;
mViewTreeObserver=arr[position]。getViewTreeObserver();
mViewTreeObserver.addOnGlobalLayoutListener(onGlobalLayoutListener);
返回视图;
}
OnGlobalLayoutListener OnGlobalLayoutListener=新建OnGlobalLayoutListener()
{
@抑制警告(“弃用”)
@凌驾
公共图书馆
{
Log.e(“内部globallayout”和“);
ViewTreeObserver obs=holder.review.getViewTreeObserver();
obs.RemoveGlobalOnlayOutliner(本);
对于(;索引3)
{
System.out.println(“at index”+index+“是arr[index]”+arr[index]);
int lineEndIndex=arr[index].getLayout().getLineEnd(2);
字符串text=arr[index].getText().subSequence(0,lineEndIndex-3)+“…”;
holder=(ViewHolder)布局[index].getTag();
holder.review.setText(文本);
holder.mReadMoreButton=新按钮(上下文);
RelativeLayout ll=(RelativeLayout)布局[索引].findViewById(R.id.layout);
LayoutParams lp=新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.WRAP_内容);
lp.addRule(RelativeLayout.down,arr[index].getId());
System.out.println(“holder.review.getId()”+arr[index].getId());
ll.addView(holder.mReadMoreButton,lp);
系统输出打印项次(“ll”+ll+“lp”+lp);
holder.mReadMoreButton.setText(“Readmore”);
holder.mReadMoreButton.setId(j++);
holder.mReadMoreButton.setTag(索引);
holder.mReadMoreButton.setOnClickListener(onReadMoreClickListener);
}
}
}
}
};
OnClickListener onReadMoreClickListener=新建OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
v、 设置可见性(View.GONE);
clickedPosition=(整数)v.getTag();
item=reviews.get(单击位置);
//Log.d(“项目”,“项目+项目”);
Log.d(“布局[clickedPosition],”+布局[clickedPosition]);
holder=(ViewHolder)布局[clickedPosition].getTag();
holder.review.setText(item.getReview());
holder.mReadLessButton=新按钮(上下文);
RelativeLayout ll=(RelativeLayout)布局[clickedPosition]。findViewById(R.id.layout);
LayoutParams lp=新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.WRAP_内容);
lp.addRule(RelativeLayout.down,v.getId());
ll.addView(holder.mReadLessButton,lp);
holder.mReadLessButton.setText(“无读”);
holder.mReadLessButton.setId(k++);
holder.mReadLessButton.setTag(单击位置);
holder.mReadMoreButton.setVisibility(View.GONE);
holder.mReadLessButton.setOnClickListener(onReadLessClickListener);
}
};
OnClickListener onReadLessClickListener=新的OnClickListener()
{
@凌驾
公共void onClick(最终视图v)
{
v、 设置可见性(View.GONE);
clickedPosition=(整数)v.getTag();
布局l=arr[clickedPosition].getLayout();
如果(l!=null)
{
int lines=l.getLineCount();
Log.d(“行”,“行+行”);
如果(行数>3)
{
holder=(ViewHolder)布局[clickedPosition].getTag();
int lineEndIndex=arr[clickedPosition].getLayout().getLineEnd(2);
字符串text=arr[clickedPosition].getText().subSequence(0,lineEndIndex-3)+“…”;
flag=false;
holder.review.setText(文本);
holder.mReadMoreButton=新按钮(上下文);
RelativeLayout ll=(RelativeLayout)布局[clickedPosition]。findViewById(R.id.layout);
LayoutParams lp=新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.WRAP_内容);
lp.addRule(RelativeLayout.down,holder.review.getId());
ll.addView(holder.mReadMoreButton,lp);
holder.mReadMoreButton.setText(“Readmore”);
holder.mReadMoreButton.setId(a++);
holder.mReadMoreButton.setTag(单击位置);
holder.mReadLessButton.setVisibility(View.GONE);
holder.mReadMoreButton.setOnClickListener(onReadMoreClickListener);
}
}
}
};
if (convertView == null)
{
convertView = inflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.review = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
layouts[position] = convertView;
}
holder = (ViewHolder) convertView.getTag();
item = reviews.get(position);
length = position;
Log.e("inside getView",""+holder);
Log.e("item",""+item.getReview());
if(flag)
{
holder.review.setText(item.getReview());
}
arr[position] = holder.review;
mViewTreeObserver = arr[position].getViewTreeObserver();
mViewTreeObserver.addOnGlobalLayoutListener(onGlobalLayoutListener);
return convertView;
}
OnGlobalLayoutListener onGlobalLayoutListener = new OnGlobalLayoutListener()
{
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout()
{
Log.e("inside globallayout","");
ViewTreeObserver obs = holder.review.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
for (; index <= length; index++)
{
Layout l = arr[index].getLayout();
if (l != null)
{
int lines = l.getLineCount();
Log.d("lines", "" + lines);
if (lines > 3)
{
System.out.println("at index" + index + "is arr[index]" + arr[index]);
int lineEndIndex = arr[index].getLayout().getLineEnd(2);
String text = arr[index].getText().subSequence(0, lineEndIndex - 3) + "...";
holder = (ViewHolder) layouts[index].getTag();
holder.review.setText(text);
holder.mReadMoreButton = new Button(context);
RelativeLayout ll = (RelativeLayout) layouts[index].findViewById(R.id.layout);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.BELOW, arr[index].getId());
System.out.println("holder.review.getId()" + arr[index].getId());
ll.addView(holder.mReadMoreButton, lp);
System.out.println("ll " + ll + "lp " + lp);
holder.mReadMoreButton.setText("Readmore");
holder.mReadMoreButton.setId(j++);
holder.mReadMoreButton.setTag(index);
holder.mReadMoreButton.setOnClickListener(onReadMoreClickListener);
}
}
}
}
};
OnClickListener onReadMoreClickListener = new OnClickListener()
{
@Override
public void onClick(View v)
{
v.setVisibility(View.GONE);
clickedPosition = (Integer) v.getTag();
item = reviews.get(clickedPosition);
//Log.d("item",""+item);
Log.d("layout[clickedPosition]",""+layouts[clickedPosition]);
holder = (ViewHolder) layouts[clickedPosition].getTag();
holder.review.setText(item.getReview());
holder.mReadLessButton = new Button(context);
RelativeLayout ll = (RelativeLayout) layouts[clickedPosition].findViewById(R.id.layout);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.BELOW, v.getId());
ll.addView(holder.mReadLessButton, lp);
holder.mReadLessButton.setText("Readless");
holder.mReadLessButton.setId(k++);
holder.mReadLessButton.setTag(clickedPosition);
holder.mReadMoreButton.setVisibility(View.GONE);
holder.mReadLessButton.setOnClickListener(onReadLessClickListener);
}
};
OnClickListener onReadLessClickListener = new OnClickListener()
{
@Override
public void onClick(final View v)
{
v.setVisibility(View.GONE);
clickedPosition = (Integer) v.getTag();
Layout l = arr[clickedPosition].getLayout();
if (l != null)
{
int lines = l.getLineCount();
Log.d("lines", "" + lines);
if (lines > 3)
{
holder = (ViewHolder) layouts[clickedPosition].getTag();
int lineEndIndex = arr[clickedPosition].getLayout().getLineEnd(2);
String text = arr[clickedPosition].getText().subSequence(0, lineEndIndex - 3) + "...";
flag=false;
holder.review.setText(text);
holder.mReadMoreButton = new Button(context);
RelativeLayout ll = (RelativeLayout) layouts[clickedPosition].findViewById(R.id.layout);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.BELOW, holder.review.getId());
ll.addView(holder.mReadMoreButton, lp);
holder.mReadMoreButton.setText("Readmore");
holder.mReadMoreButton.setId(a++);
holder.mReadMoreButton.setTag(clickedPosition);
holder.mReadLessButton.setVisibility(View.GONE);
holder.mReadMoreButton.setOnClickListener(onReadMoreClickListener);
}
}
}
};