本人遇到一个项目需要将ListView设置固定的高度,但是数据列表的gaodu

本人遇到一个项目需要将ListView设置固定的高度,但是数据列表的高度大于ListView的设置高度,需要将所有的数据都能展现出来。如果使用手动滑动会显得不够好,,就需要自动的滚动展示所有的数据。

在网上查了很多资料都不是很全面,综合网上的资料,完成一个能够使用的demo。不过在demo中,listview的item在滚动的时候会存在一个停顿现在,希望知道能够提供一下解决的方法。

在本例中主要使用的就是Timer的功能,上代码。

MainActivity 是加载数据和设置定时器。

public class MainActivity extends Activity{

private ListView listView;

private List list;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

listView = (ListView) findViewById(R.id.listView1);

list = getList();

new Timer().schedule(new TimeTaskScroll(this, listView,list), 100, 100);

}

/**

* 获取数据

*/

public List getList(){

List list =  new ArrayList();

for (int i = 0; i < 10; i++) {

list.add(String.valueOf(i));

}

return list;

}

}

public class TimeTaskScroll extends TimerTask {

private ListView listView;

public TimeTaskScroll(Context context, ListView listView, List list){

this.listView = listView;

listView.setAdapter(new ListAdapter(context, list));

}

private Handler handler = new Handler() {

public void handleMessage(android.os.Message msg) {

listView.smoothScrollBy(10, 0);

};

};

@Override

public void run() {

Message msg = handler.obtainMessage();

handler.sendMessage(msg);

}

}

在适配器中设置listview的数据Integer.MAX_VALUE,在滚动的同时能可以是循环的展示。

public class ListAdapter extends BaseAdapter {

private List list;

private LayoutInflater mInflater;

public ListAdapter(Context context, List list){

this.list = list;

this.mInflater = LayoutInflater.from(context);

}

@Override

public int getCount() {

return Integer.MAX_VALUE;

}

@Override

public Object getItem(int arg0) {

return list.get(arg0 % list.size());

}

@Override

public long getItemId(int arg0) {

return arg0 % list.size();

}

@Override

public View getView(int postition, View convertView, ViewGroup arg2) {

ViewHoler viewHolder = null;

if(convertView == null){

viewHolder = new ViewHoler();

convertView = mInflater.inflate(R.layout.activity_list_item, null);

viewHolder.tvText = (TextView) convertView.findViewById(R.id.adapter_list_layout_tv);

convertView.setTag(viewHolder);

}else{

viewHolder = (ViewHoler) convertView.getTag();

}

viewHolder.tvText.setText(list.get(postition % list.size()));

return convertView;

}

static class ViewHoler{

TextView tvText;

}

}

源码下载地址:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐