Здравствуйте, в общем добавил spinner в mainactivity(выбор этажей:1 этаж, 2 этаж). Нужно было сделать так чтобы при выборе 1 этажа в списке были комнаты 1 этажа, при выборе 2го комнаты 2 го этажа. Это я выполнил(см в MainActivity). Теперь нужно сделать чтобы при нажатии комнат их переводили в соответствующие activity. Я это пытался реализовать, но где то я ошибся. Дело в том что при нажатии на комнаты второго этажа открываются активити комнат первого этажа. Я так понял я неправильно сделал функцию switch в спиннере, там я в начале функции очищаю лист RecycleView с помошью albumList.clear(). И поэтому значения case-ов сбивается. Это лишь мое предположение. Правильного решения не нашел, помогите пожалуйста
Mainactivity.java:
albumList = new ArrayList<>();
adapter = new RoomsAdapter(this, albumList);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 1);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
value = parent.getItemAtPosition(position);
switch (position) {
case 0:
firstLevel();
break;
case 1:
secondLevel();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
...
private void firstLevel() {
int[] first = new int[]{
R.drawable.reg,
R.drawable.spec,
R.drawable.ozd,
R.drawable.mast};
albumList.clear();
Album a = new Album("Кафедра", first[0]);
albumList.add(a);
a = new Album("Зал", first[1]);
albumList.add(a);
a = new Album("Оздоровительный зал", first[2]);
albumList.add(a);
a = new Album("Школа мастеров", first[3]);
albumList.add(a);
adapter.notifyDataSetChanged();
}
private void secondLevel() {
int[] second = new int[]{
R.drawable.prez,
R.drawable.nemec,
R.drawable.chitzal,
R.drawable.centr};
albumList.clear();
Album b = new Album("Читальный зал библиотеки первого Президента", second[0]);
albumList.add(b);
b = new Album("Немецко-французский читальный зал", second[1]);
albumList.add(b);
b = new Album("Читальный зал", second[2]);
albumList.add(b);
b = new Album("Центр по изучению нового языка ", second[3]);
albumList.add(b);
adapter.notifyDataSetChanged();
}
RoomsAdapter.java:
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public ImageView thumbnail;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
thumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (getAdapterPosition()){
case 0:
Intent regintent = new Intent(mContext, Register.class);
mContext.startActivity(regintent);
break;
case 1:
Intent specintent = new Intent(mContext, Spec.class);
mContext.startActivity(specintent);
break;
case 2:
Intent ozdintent = new Intent(mContext, Ozd.class);
mContext.startActivity(ozdintent);
break;
case 3:
Intent mastintent = new Intent(mContext, Mast.class);
mContext.startActivity(mastintent);
break;
}
}
});
}
}
Album.java:
public class Album {
private String name;
private int numOfSongs;
private int thumbnail;
public Album() {
}
public Album(String name, int thumbnail) {
this.name = name;
this.thumbnail = thumbnail;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getThumbnail() {
return thumbnail;
}
public void setThumbnail(int thumbnail) {
this.thumbnail = thumbnail;
}
}
В коде у вас ошибок нет. У вас ошибки в логике и понимании. Постараюсь объяснить.
Для достижения нужного поведения, вам необходимо иметь тип ячейки, чтоб понять в какую активити переходить, а вы обрабатываете позицию в списке. Те получается сколько вы не делали бы разных комнат, вы всегда будете переходить в зависимости от позиции. И действительно это лего исправить, я не знаю вашей внутренней реализации и напишу простой код с наименшим кол-ом изменений, в идеале я бы всё переписал:
в классе Album
добавим переменную, напирмер:
int levelNumber, примерно так:
public class Album {
private int levelNumber;
private String roomName;
private int roomResImage;
public Album(int levelNumber, String roomName, int roomResImage) {
this.levelNumber = levelNumber;
this.roomName = roomName;
this.roomResImage = roomResImage;
}
public int getLevelNumber() {
return levelNumber;
}
public void setLevelNumber(int levelNumber) {
this.levelNumber = levelNumber;
}
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public int getRoomResImage() {
return roomResImage;
}
public void setRoomResImage(int roomResImage) {
this.roomResImage = roomResImage;
}
}
тогда в адаптере примерно будет так:
public TextView title;
public ImageView thumbnail;
public MyViewHolder(View view) {
super(view);
title = view.findViewById(R.id.title);
thumbnail = view.findViewById(R.id.thumbnail);
int levelNumber = albums.get(getAdapterPosition()).getLevelNumber();
thumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (levelNumber){
case 1: break; // переход на 1-й левел
case 2: break; // переход на 2-й левел
...
}
}
});
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
ЗдравствуйтеПри запуске maven-приложения получаю такую ошибку: "Развертывание на месте на /home/torin/NetBeansProjects/mavenproject1/Calculator1/target/Calculator1-1
Есть JFrame в котором выполняются действия по нажатию JButtonПишу код в строке обработчика события , но сам проект не запускается, т