java - 打开 Activity 时如何停止 'jumping effect'?

标签 java android performance

我有超过三个 Activity ,这些其他 Activity 过渡得很好,但我在下面包含的一个 Activity 似乎每次导航到它时都会跳转。

我已经覆盖了动画类,但跳转仍然存在。我该怎么办?我的 Ui 线程是否重载?

  public class ListActivity extends AppCompatActivity implements 
  RecyclerViewAdapter.OnItemClickListener {

RecyclerViewAdapter recyclerViewAdapter;
RecyclerView recyclerView;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference dbRef = db.collection("Archives");
Context context;
FloatingActionButton fab;
Item clickedItem;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);
    overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

    recyclerView = findViewById(R.id.recyclerView);
    fab = findViewById(R.id.fab);

    Toolbar toolbar = findViewById(R.id.toolbar);

    if (toolbar != null) {
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    });
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(ListActivity.this, 
    EnterDataActivity.class);
            startActivity(intent);
        }
    });

    setUpAdapter();
 }

 private void setUpAdapter() {

    Query query = dbRef.orderBy("fname", Query.Direction.DESCENDING);

    FirestoreRecyclerOptions<Item> options = new 
 FirestoreRecyclerOptions.Builder<Item>()
            .setQuery(query, Item.class)
            .build();
    recyclerViewAdapter = new RecyclerViewAdapter(options, 
   ListActivity.this);
    recyclerViewAdapter.notifyDataSetChanged();
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(context));
    recyclerView.setAdapter(recyclerViewAdapter);
    recyclerViewAdapter.setOnItemClickListener(ListActivity.this);
 }

  @Override
 public void onStart() {
    super.onStart();
    recyclerViewAdapter.startListening();
 }

 @Override
 public void onStop() {
    super.onStop();
    recyclerViewAdapter.stopListening();
 }


@Override public void onItemClick(DocumentSnapshot documentSnapshot, int 
position) {

    clickedItem = documentSnapshot.toObject(Item.class);
    clickedItem.setId((documentSnapshot.getId()));

    Intent intent = new Intent(ListActivity.this, DetailActivity.class);

    intent.putExtra(First_Name, clickedItem.getFname());
    intent.putExtra(Middle_Name, clickedItem.getMname());
    intent.putExtra(Sur_Name, clickedItem.getSname());
    intent.putExtra(Email, clickedItem.getEmail());
    intent.putExtra(phone, clickedItem.getPhone());
    intent.putExtra(city, clickedItem.getCity());
    intent.putExtra(parents_Name, clickedItem.getParentsName());
    intent.putExtra(parents_Phone, clickedItem.getParentsContact());
    intent.putExtra(dob, clickedItem.getDob());
    intent.putExtra(emergency, clickedItem.getEmergency());
    intent.putExtra(profile_Picture, clickedItem.getProfilePicture());

    overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
    startActivityForResult(intent, 45);


}

 @Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable 
  Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if ((requestCode == 45 && resultCode == RESULT_OK && data != null)) {
        String fname = data.getStringExtra(First_Name);
        String mname = data.getStringExtra(Middle_Name);
        String sname = data.getStringExtra(Sur_Name);
        String email = data.getStringExtra(Email);
        String Phone = data.getStringExtra(phone);
        String City = data.getStringExtra(city);
        String pname = data.getStringExtra(parents_Name);
        String pphone = data.getStringExtra(parents_Phone);
        String Dob = data.getStringExtra(dob);
        String Emergency = data.getStringExtra(emergency);
        String profile = data.getStringExtra(profile_Picture);

        Item items = new Item(fname, mname, sname, email, Phone, City, 
    pname, pphone, Dob, Emergency, profile);

        db.collection("Archives").document(clickedItem.getId())
                .set(items).addOnSuccessListener(new 
       OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {

                Toast.makeText(ListActivity.this, "Updated Successfully", 
        Toast.LENGTH_LONG).show();


            }
        });
      }
     }
   }

最佳答案

Activity overridePendingTransition 的文档说:

Call immediately after one of the flavors of startActivity(android.content.Intent) or finish() to specify an explicit transition animation to perform next.

因此在任何其他地方调用 overridePendingTransition 至少不会执行任何操作。删除 setContentView 之后的 ListActivity#onCreate 中的此类调用,并将它们放在 startActivitystartActivityForResult 的下一行。

关于java - 打开 Activity 时如何停止 'jumping effect'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57115665/

相关文章:

php - 在 PHP 中标记化 CSS 的性能

android - Android蓝牙 socket

java - 通过 JSON Android Java 动态设置选项卡标题

c# - 使用查询表达式时缓存?

java - Java 和 Android 的线程问题

android - 从 adb 在后台运行 logcat

arrays - 数组是否有唯一元素?

java - 垃圾收集器 (.net/java) 是实时系统的问题吗?

JavaFX:尝试使对话框出现在应用程序之前

java - 从字节数组中获取一系列位