Android Проблема с анимацией холодного старта активности - PullRequest
1 голос
/ 07 августа 2020

Когда я запускаю DbActivity (когда приложение запускается в первый раз), анимация RecyclerView не работает (возможно, она работает, но не отображается), но если я снова открываю Activity, она работает нормально.

Я попытался переместить istruction, используемый для получения данных и создания адаптера в методе onStart (), но это не сработало.

В чем проблема?

Код DbActivity:

public class DbActivity extends AppCompatActivity {

    private Activity contesto;

    private ImageButton cercaBtn;
    private EditText SSIDEditText;
    private EditText PositionEditText;

    private DBManager manager;
    private ArrayList<Rete> reti;

    public static RecyclerView recyclerView;
    public static DatabaseRecyclerViewAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_db);

        this.contesto = this;

        // dbManager init.
        manager = DBManager.getDbInstance(getApplicationContext());

        // searching button
        cercaBtn = findViewById(R.id.elimina_db);

        // searching EditText 
        SSIDEditText = findViewById(R.id.searchSSID);
        PositionEditText = findViewById(R.id.searchPosition);

        // adapter creation
        adapter = new DatabaseRecyclerViewAdapter();

        // recyclerview init.
        recyclerView = (RecyclerView) findViewById(R.id.cursor_listview);
        recyclerView.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(this, R.anim.layout_animation));
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        // getting data
        reti = manager.query();

        //  updating adapter data
        adapter.setReti(reti);
        
        // adding listeners
        setListeners();
    }

    ...
}

CustomAdapter:

public class DatabaseRecyclerViewAdapter extends RecyclerView.Adapter<DatabaseRecyclerViewAdapter.ViewHolder> {
    ArrayList<Rete> reti;

    public DatabaseRecyclerViewAdapter(ArrayList<Rete> reti) {
        setReti(reti);
    }

    public DatabaseRecyclerViewAdapter() {

    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_cursoradapter, parent, false);
        DatabaseRecyclerViewAdapter.ViewHolder holder = new DatabaseRecyclerViewAdapter.ViewHolder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
        Rete tmp = reti.get(position);

        //holder.linearLayout.setAnimation(AnimationUtils.loadAnimation(holder.view.getContext(), R.anim.item_animation_fall_down));

        // updating elements text
        holder.SSID.setText(tmp.getSSID());
        holder.info.setText(tmp.getDettagli());
        holder.level.setText(tmp.getLevel());

        // decrypting password
        try {
            holder.password.setText(AESCrypt.decrypt(tmp.getPassword()));
        } catch (Exception e) {
            holder.password.setText("");
            Log.d("ENCRIPTION", "FAIL: " + e);
        }

        // makes password field clickable
        holder.password.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // printing the alert box used to edit the password
                AlertBoxManager.displayUpdatePasswordAlertBox((Activity) view.getContext() , holder.password, holder.SSID.getText().toString());
            }
        });

        // getting lat & lon
        Double lat = tmp.getLat();
        Double lon = tmp.getLon();

        // commute coordinates into human readable string
        HumanPosition converter = new HumanPosition(holder.view.getContext());
        holder.position.setText(converter.coordToString(lat, lon));
    }

    @Override
    public int getItemCount() {
        return reti.size();
    }

    public void setReti(ArrayList<Rete> reti) {
        this.reti = reti;
        notifyDataSetChanged();
        DbActivity.recyclerView.scheduleLayoutAnimation();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private TextView SSID;
        private TextView info;
        private TextView level;
        private TextView password;
        private TextView position;
        private LinearLayout linearLayout;

        private View view;

        public ViewHolder(@NonNull final View itemView) {
            super(itemView);

            view        = itemView;
            //linearLayout = (LinearLayout) itemView.findViewById(R.id.dbRecyclerViewLinearLayout);

            SSID        = (TextView) itemView.findViewById(R.id.cursor_SSID);
            info        = (TextView) itemView.findViewById(R.id.cursor_dettagli);
            level       = (TextView) itemView.findViewById(R.id.cursor_level);
            password    = (TextView) itemView.findViewById(R.id.cursor_password);
            position    = (TextView) itemView.findViewById(R.id.cursor_position);

            itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    AlertBoxManager.displayDeleteReteAlertBox((Activity) view.getContext(), SSID.getText().toString());

                    return false;
                }
            });
        }


    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...