gpt4 book ai didi

Android - 查看通货膨胀弄乱了 fragment 交易动画

转载 作者:行者123 更新时间:2023-11-30 03:28:15 25 4
gpt4 key购买 nike

我有一些 fragment ,其中内部 View 动态膨胀并添加到线性布局以形成类似于 ListView 的东西。这在高端设备上运行良好,但在中低端设备上动画有非常明显的滞后,有时动画会被完全跳过。我试着在谷歌上搜索了一下,但没有发现任何关于与 inflatedView 相关的过渡动画的具体信息,也没有找到关于如何在这样的过程中处理动态 View 膨胀的提示。

回顾一下……用户按下按钮, fragment 进入 View , View 动态膨胀,动画滞后或被跳过。如果可能的话,我真的很想让一切顺利。

编辑:一些示例代码

public static void addPersonRow(PersonObject po){

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 50);
params.setMargins(0, 5, 0, 5);
final View view = IncidentReport_v2.ir2.getLayoutInflater().inflate(R.layout.ir_involved_people_row, null);
view.setLayoutParams(params);
view.setTag(po.originalName);

RelativeLayout rl = (RelativeLayout) view.findViewById(R.id.ir_involved_ppl_add_row_rl);

TextView name = (TextView) view.findViewById(R.id.ir_involved_ppl_name_txt);
name.setText(po.firstName+" "+po.lastName);

ImageButton open = (ImageButton) view.findViewById(R.id.ir_involved_ppl_reopen_btn);
Bundle b = new Bundle();
b.putParcelable("personObj", po);
open.setTag(b);
name.setTag(b);
rl.setTag(b);

OnClickListener openClick = new OnClickListener() {

@Override
public void onClick(View v) {

pplAddFrag = new IR_PeopleInvolved_AddForm_Fragment();
Bundle b = new Bundle();
b.putParcelable("existingPerson", (Bundle)v.getTag());
pplAddFrag.setArguments(b);
android.support.v4.app.FragmentManager fragmentManager = IncidentReport_v2.ir2.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.bounce, R.anim.bounce_out, R.anim.bounce, R.anim.bounce_out);
fragmentTransaction.add(R.id.ir_main_frame, pplAddFrag, "pplAddFrag");
fragmentTransaction.addToBackStack("pplAddFrag");
fragmentTransaction.commit();

IncidentReport_v2.theMenu.removeItem(R.id.incident_report_save);
IncidentReport_v2.ir2.invalidateOptionsMenu();

}
};

open.setOnClickListener(openClick);
name.setOnClickListener(openClick);
rl.setOnClickListener(openClick);

ImageButton delete = (ImageButton) view.findViewById(R.id.ir_involved_ppl_delete_btn);
delete.setTag(po);
delete.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
pplHolder.removeView(view);
IncidentReport_v2.people.remove((PersonObject)v.getTag());
IR_InvolvedFragment.pplCounterTxt.setText(IncidentReport_v2.people.size()+"");
}
});

pplHolder.addView(view);

if(!IncidentReport_v2.people.contains(po)){
IncidentReport_v2.people.add(po);
}

IR_InvolvedFragment.pplTxt.setTextColor(IncidentReport_v2.ir2.getResources().getColor(R.color.green));
IR_InvolvedFragment.pplCounterTxt.setText(IncidentReport_v2.people.size()+"");

}

根据我拥有的 personObjects 的数量,它会在 for 循环内被调用

最佳答案

1) 不要将方法设为静态(这样您以后可以访问字段以进行更多优化)

2) 缓存 LayoutInflater ,这样你就不必为每一行都获取它

3) 如果您从 XML 中获取 View ,不妨在 XML 中设置边距和权重

4) 从 UI 线程创建 Bundle,并在最后一刻或作为回调设置它

5) 在别处创建你的 fragment ,每次按下 onclick 时使用相同的 fragment 为此使用 FragmentManager,回调将更轻量级

6) 你设置了三个 onclick 监听器来做同样的事情,你能不能只将 ImageView 点击委托(delegate)给父级,即只在相对布局上设置点击

7) 综上所述,FragmentTransaction 是最慢的,可能需要考虑将其更改为自定义 View ,并在带有布局动画的 onClick 中使用 visible & gone

试一试

关于Android - 查看通货膨胀弄乱了 fragment 交易动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17892956/

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