Когда я запускаю 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;
}
});
}
}
}