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(); 这样就不出现重复刷新了. |
|
恩,这也是个优化的办法,学习了 |
|
回复晚了吗?没得到分儿~ |
|
你回复的时候我已经结贴了 |