我已经构建了一个自定义的CursorAdapter,它需要用推文填充ListView ......只会显示简单的日期和推文...... 它工作得很好,唯一的事情是,如果我添加一个Log条目,我注意到BindView方法每隔8秒就会连续调用一次......这与ViewFlipper在屏幕上其他位置的flipDuration相对应...(通过更改持续时间并看到使用新的间隔时间调用BindView)
ViewFlipper确实使用与ViewList相同的布局xml和相同的数据(虽然我对数据库进行了2次单独调用以加载它们)
这是正常行为吗?
呈现List和Flipper的方法:
public void loadTwitterFeed(){
ListView twitterList = (ListView) findViewById(R.id.twitterList);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
dbHelper dbh = new dbHelper(this);
dbh.openRead();
twitterDbAdapter adapt = new twitterDbAdapter(this, dbh.getTweets());
twitterList.setAdapter(adapt);
ViewFlipper flipper = (ViewFlipper) findViewById(R.id.twitterFlipper);
ArrayList<twitterTweet> tweets = dbh.getTweetsAsList();
for( twitterTweet obj : tweets){
View tItem = (View) inflater.inflate(R.layout.twitter_item, flipper, false);
TextView tv1 = (TextView) tItem.findViewById(R.id.textView1);
TextView tv2 = (TextView) tItem.findViewById(R.id.textView2);
tv1.setText(obj.getDate());
tv2.setText(obj.getText());
flipper.addView(tItem);
}
dbh.close();
flipper.setFlipInterval(5000);
flipper.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.slide_in_left));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.slide_out_right));
flipper.startFlipping();
}
我的自定义适配器:
public class twitterDbAdapter extends CursorAdapter{
private LayoutInflater inflater;
public twitterDbAdapter(Context context, Cursor cursor){
super(context, cursor);
inflater = LayoutInflater.from(context);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
Log.i("extra","binding");
TextView textView = (TextView) view.findViewById(R.id.textView1);
TextView textView2 = (TextView) view.findViewById(R.id.textView2);
textView.setText(cursor.getString(cursor.getColumnIndex("createdat")));
textView2.setText(cursor.getString(cursor.getColumnIndex("tweet")));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = inflater.inflate(R.layout.twitter_item, parent, false);
return view;
}
}
答案 0 :(得分:2)
它运行良好,唯一的是如果我添加一个日志条目,我注意到 每8个连续调用BindView方法 每个项目的秒数
我怀疑为bindView
中的所有项目调用了ListView
,很可能是为可见项目调用了该方法(加上一些额外的调用)。
当ViewFillper
翻过它的孩子时,Android需要重新布局当前的屏幕内容,这可能是bindView
方法在ViewFlipper
切换时被调用的原因间隔。这对你来说无关紧要。
答案 1 :(得分:0)
正如Luksprog解释的那样,这是正常的行为。每当需要显示一行时,就会调用方法bindView。如果您关注性能(包括列表和广泛受众,您经常应该这样做)并且不会在每次翻转时更改列表的内容(行),您可能需要考虑覆盖newView
而不是{{1} },if / where适用,缓存等。