gpt4 book ai didi

android - 添加 View 使 fragment 内的 ListView 刷新

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:57 34 4
gpt4 key购买 nike

这可能有点难以解释,所以我能想到的最好方法是为您提供一个显示问题的视频。

在视频中,我向自己展示了滚动 ListView ,5 秒后,创建了一个 View 并将其添加到底部的支架中。在那一刻, ListView 被刷新。

http://tinypic.com/player.php?v=vpz0k8%3E&s=8#.U0VrIvl_t8E

问题如下:

我有一个 Activity,其布局包括:

  1. Fragment(在 RelativeLayout 之上),匹配父级,匹配父级。
  2. RelativeLayout,作为包装内容。

该 fragment 显示一个 ListView,每行都有动画。

如果我在“RelativeLayout”上添加一个 View ,它会使 fragment 重新调整到新的大小,因为它设置在这个 RelativeLayout 之上,所以每一行都会重新构建。

你们有什么办法可以避免这种情况吗?

编辑:源代码: https://bitbucket.org/sergicast/listview-animated-buggy

最佳答案

如果添加的页脚 View 的布局过程正在运行,请不要启动动画。布局过程的结束可以使用 ViewTreeObserver 来确定(开始显然是从添加页脚 View 开始的):

    hand.postDelayed(new Runnable() {

@Override
public void run() {
ViewTreeObserver viewTreeObserver = holder.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
holder.getViewTreeObserver().removeGlobalOnLayoutListener(this);
mIgnoreAnimation = false;
}
});

mIgnoreAnimation = true;
holder.addView(viewToAdd);
}
}, 5000);

将此方法添加到您的 Activity 中:

public boolean ignoreAnimation() {
return mIgnoreAnimation;
}

并在你的 fragment 中检查它:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
Context context = FragmentTest.this.getActivity();

TextView tv = new TextView(context);
tv.setText("Pos: " + position);
tv.setTextSize(35f);

if (runAnimation()) {
Animation anim = AnimationUtils.loadAnimation(context, R.anim.animation);
tv.startAnimation(anim);
}

return tv;
}

private boolean runAnimation() {
Activity activity = getActivity();
if (activity != null && activity instanceof MainActivity) {
return ! ((MainActivity)activity).ignoreAnimation();
}
return true;
}

当然,整个 Activity - Fragment 通信可以得到显着改进,但该示例为您提供了解决问题的一般思路。

虽然它会阻止动画开始,但不会阻止 ListView 刷新,尽管用户不会注意到。如果您担心性能,您可以通过重新使用 View 来改进适配器代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
Context context = FragmentTest.this.getActivity();
TextView tv = null;
if (convertView != null && convertView instanceof TextView) {
tv = (TextView) convertView;
}
else {
tv = new TextView(context);
}

关于android - 添加 View 使 fragment 内的 ListView 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22971221/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com