|
listview上下拖动,有些数据就不显示了,打印数据可以看到有数据,就是没显示,也用了ViewHolder优化还是没用,请问一下还能怎么优化吗 |
|
30分 |
什么类型的数据?还有麻烦贴一下adapter的代码
|
public final class ViewHolder {
TextView expr;
TextView result;
}
// @Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
ViewHolder viewholder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.history_item, parent, false);
viewholder = new ViewHolder();
viewholder.expr = (TextView) convertView.findViewById(R.id.historyExpr);
viewholder.result = (TextView) convertView.findViewById(R.id.historyResult);
convertView.setTag(viewholder);
} else {
viewholder = (ViewHolder) convertView.getTag();
}
HistoryEntry entry = mEntries.elementAt(position);
String base = entry.getBase();
Log.v("lc", "base--"+base);
if(!base.equals("")&&base.length()>0){
viewholder.expr.setText(base);
try {
String res = mEval.evaluate(base);
viewholder.result.setText("= " + res);
} catch (SyntaxException e) {
viewholder.result.setText(R.string.error);
}
}else{
convertView.setVisibility(View.GONE);
}
return convertView;
}
|
|
|
中间那行打印的,数据都有,就是没显示 |
|
10分 |
那你 在 if else 里 都打印一下 看看程序走哪个分支
|
|
打印过了,没有走else,上下滑动几次就这样了 |
|
|
if(!base.equals(“”)&&base.length()>0){
convertView.setVisibility(View.Visiable); viewholder.expr.setText(base); try { String res = mEval.evaluate(base); viewholder.result.setText(“= ” + res); } catch (SyntaxException e) { viewholder.result.setText(R.string.error); } }else{ convertView.setVisibility(View.GONE); } 照着这个改吧,加一行代码 |
|
|
View.VISIBLE
View.VISIBLE上个恢复写错了 |
|
太感谢了,确实是这个原因,刚才忘记说了每次滑到最后一行会走else的,谢谢哈 |
|
刚才忘记说了每次滑到最后一行会走else的,就是这个原因 convertView.setVisibility(View.GONE);。。也谢谢你 |
|
|
定义一个map保存已经显示过的view.
map.put(positon,convertview); 如果map中包含view,则 convertview=map.get(postion); viewholder = (ViewHolder) convertView.getTag(); 这样就不出现重复刷新了. |
|
恩,这也是个优化的办法,学习了 |
|
回复晚了吗?没得到分儿~ |
|
你回复的时候我已经结贴了 |
|