Android ListView滚动列表中的剪辑项目

Android ListView滚动列表中的剪辑项目,android,listview,scroll,clip,Android,Listview,Scroll,Clip,我试图在我的listview中使用scrollBy方法,并在列表中滚动,但会通过剪切项目使列表看起来很奇怪 我正在尝试使用以下方法刷新列表 l.invalidate(); l.requestLayout(); l.forceLayout(); l.invalidateViews(); l.postInvalidate(); l.refreshDrawableState(); 但并没有好的结果:在我向下滚动150像素后看到图像 data5下面有更多条目,但它们已被剪裁 代码: 公共类TestL

我试图在我的listview中使用scrollBy方法,并在列表中滚动,但会通过剪切项目使列表看起来很奇怪

我正在尝试使用以下方法刷新列表

l.invalidate();
l.requestLayout();
l.forceLayout();
l.invalidateViews();
l.postInvalidate();
l.refreshDrawableState();
但并没有好的结果:在我向下滚动150像素后看到图像

data5下面有更多条目,但它们已被剪裁

代码:

公共类TestListViewScrollActivity扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
最终ListView l=(ListView)findViewById(R.id.listView1);
final MyAdapter=新的MyAdapter(getApplicationContext());
l、 设置适配器(适配器);
l、 setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){
adapter.add();
l、 scrollBy(0,150);
l、 使无效();
l、 requestLayout();
l、 forceLayout();
l、 失效视图();
l、 后验证();
l、 refreshDrawableState();
}
});
}
}
类MyAdapter扩展了BaseAdapter{
ArrayList数据=新的ArrayList();
语境;
公共MyAdapter(上下文){
数据。添加(“数据1”);
数据。添加(“数据2”);
数据。添加(“数据3”);
数据。添加(“数据4”);
数据。添加(“数据5”);
数据。添加(“数据6”);
数据。添加(“数据7”);
数据。添加(“数据8”);
数据。添加(“数据9”);
this.context=上下文;
}
公共无效添加(){
//数据。添加(0,“新数据”);
//notifyDataSetionValidated();
notifyDataSetChanged();
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回data.size();
}
@凌驾
公共对象getItem(int位置){
返回数据。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
观点五;
if(convertView==null){
LayoutInflater vi=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
v=vi.充气(R.layout.listitem,空);
}否则{
v=转换视图;
}
TextView text=(TextView)v.findViewById(R.id.text);
text.setText((字符串)data.get(位置));
返回v;
}
}

通过不使用scrollBy而是

l.setSelectionFromTop(l.getFirstVisiblePosition() + 1, l.getChildAt(0).getTop() + 150);

请看

对于我来说,joyne的答案适用于普通的列表视图,但对于具有大量标题的列表视图,它却失败了,因此我使用了这个答案,它甚至适用于大量标题

public void scrollBy(ListView l, int px){
    l.setSelectionFromTop(l.getFirstVisiblePosition(), l.getChildAt(0).getTop() - px);
}
l.setSelectionFromTop(l.getFirstVisiblePosition() + 1, l.getChildAt(0).getTop() + 150);
public void scrollBy(ListView l, int px){
    l.setSelectionFromTop(l.getFirstVisiblePosition(), l.getChildAt(0).getTop() - px);
}